欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浮点数比较

程序员文章站 2022-03-02 10:26:42
...

NOTE: 以下内容取自 胡凡 曾磊《算法笔记》
经过大量计算,3.14可能存储为3.1400000000001,也有可能存储为3.1499999999999,所以导致两个数不相等。于是需要引入一个极小数eps对误差进行修正。经验表明10^-8比较合适。

1、==运算符

所以一个数a如果位于[b-eps , b+eps]之间,就认为a==b成立

#include<stdio.h>
const double eps=1e-8;
#define Equ(a,b) (fabs((a)-(b))<(eps))
int main()
{
    double db=1.23;
    if (Equ(db,1.23))
    {
        printf("true\n");
    }
    else{
        printf("false\n");
    }
    return 0;
}

2、大于运算符(>)

#define More(a,b) (((a)-(b))>(eps))

3、小于运算符(<)

#define Less(a,b) (((a)-(b))<(eps))

4、大于等于运算符(<=)

#define MoreEqu(a,b) (((a)-(b))>(-eps))

5、小于等于运算符(<=)

#define MoreEqu(a,b) (((a)-(b))<(-eps))

6、圆周率π

const double Pi =acos(-1.0);