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