浮点型数据和0进行比较的探究

来源:互联网 发布:淘宝什么时候有活动 编辑:程序博客网 时间:2024/05/26 02:21

问题提出:

int main(){double i = 20.0;double j = i / 7.0;if (j * 7.0 == i)printf(“equal\n”);elseprintf(“not equal\n”);return 0;}

上述代码在vs编译器下的运行结果为equal,在Linux环境下运行结果为not equal。造成这种结果的原因是什么?

分析原因:

因为浮点数在内存中的存储方式使得,有些浮点数在内存中无法精确的存储,这样就必然有精度的丢失。一旦丢失就可能计算不够准确。无法使用 == 直接判断两个浮点数相等。

问题解决:

设置一个能接受的精度,保证误差在精度范围内就可以了

#define EXP 0.0000000001float f = 0.0000001;if(((f-21.0) > -EXP)&&((f-21.0) < EXP))    //判断f==21{//就意味着f是无限接近0的数字,就约等于0}


原创粉丝点击