天天看点

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

在判断两个浮点数 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了!