浮点数比较
程序员文章站
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);
上一篇: 浮点数的比较,浮点数存在误差