浮点数在条件判断语句中的使用
浮点数是近似数,有时候并不能像整数一样直接去比较大小,如:
double a = 3.5;
double b = 3.499999999999999999999999;
if (a > b)
printf("true\n");
else
printf("false\n");
上面代码运行后,控制台输出是false,与我们预想的结果是不一样的,这种情况对于一些对数据精确度要求高会产生很大影响!
下面是一种解决方案:
原理是高等数学中的极限
在float.h库中,提供 DBL_EPSILON和FLT_EPSILON两个最小精度,这个也可以自己定义,根据实际需求。
double a = 3.5;
double b = 3.499999999999999999999999;
if (a > b)
printf("true\n");
else
printf("false\n");
printf("******** modify **********\n");
if (fabs(a - b) < DBL_EPSILON)
printf("true\n");
else
printf("false\n");