在C中测试浮点相等性

twi*_*wid -2 c

我有以下代码,给出了奇怪的输出

#include<stdio.h>
void main()
{
 float a, x;
 a=6.7;
 if(a==6.7)
  printf("1\n");
 else
  printf("2\n");


 x=8.5;
 if(x==8.5)
  printf("1\n");
 else
  printf("2\n");

}
Run Code Online (Sandbox Code Playgroud)

产量

$ ./a.out 
2
1
Run Code Online (Sandbox Code Playgroud)

如果我用f后缀数字例如"6.7f"如果条件然后我得到正确的输出,我不明白为什么这种奇怪的行为?

jxh*_*jxh 5

float具有较低的精度double,这将是用于浮点文字的默认类型.由于6.7不能用有限数量的二进制数字表示,因此精度较低的float表示不等于double表示.