为什么两个float类型的数值不能直接相等

来源:互联网 发布:python足彩大数据分析 编辑:程序博客网 时间:2024/05/17 06:13

在判断两个浮点数 a 和 b 是否相等时,不要用 a==b,应该判断二者之差的绝对值fabs(a-b) 是否小于某个阈值,例如 1e-9。


参考:    http://blog.csdn.net/turkeyzhou/article/details/2755970


概括:

原因在于计算机在内存表示float的时候都是有误差的

最后,有一个往往高手也汗颜的地方,一定要记住,浮点数没有无符号型的usinged float/double是错误的.


你查一下符点数存储标准IEEE754就知道了!符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的。如果两个数a b都是常数赋值,这样比较,应该不会有问题,如:double a=5.3,b=5.3;if ( a == b ){printf("a=b\n");}这时会输出a=b如果a或b是经过运算后得到的值,这时就不一定是一个精确的你想要的值了,如:double b=2.6+2.7,a=5.3;if ( a == b ){printf("a=b\n");}这时就不一定能输出a=b了!


0 0
原创粉丝点击