查一下符点数存储标准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了!
fabs(a)<=0这个问题还不大但要是fabs(a)==0的话就出问题了浮点型的0在内存中并不是严格等于0的
比较完全相等通常不可靠.