int main()
{
float a = 0.8;
if (a == 0.8)
printf("x\n");
else
printf("y\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然a等于0.8,但它输出y.
0.8不能在二进制浮点中准确表示.您的代码if (a == 0.8)
基本上将单精度0.8与双精度0.8进行比较,它们不相等.
要自己查看,请尝试以下代码:
int main()
{
double a = 0.8f;
double b = 0.8;
printf("%lX\n", *(long *)&a);
printf("%lX\n", *(long *)&b);
}
Run Code Online (Sandbox Code Playgroud)
它输出:
3FE99999A0000000
3FE999999999999A
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
265 次 |
最近记录: |