Possible Duplicate:
strange output in comparision of float with float literal
这是密码
#include<stdio.h>
int main()
{
float a=0.3;
if(a==0.3)
printf("Hello World!");
else
printf("Stack Overflow");
return 0;
}
我希望输出为“Hello World”。但我得到了“堆栈溢出”。为什么我没有得到“你好世界”?
如果情况有什么问题吗?
最佳答案
Comparing floating point numbers
浮点运算不精确。像0.2这样的简单值不能用二进制浮点数精确地表示,浮点数的有限精度意味着操作顺序的细微变化可以改变结果。不同的编译器和CPU体系结构以不同的精度存储临时结果,因此结果将因环境的详细信息而异。如果你做了一个计算,然后将结果与某个期望值进行比较,你很难得到你想要的结果。
试试看:
#include<stdio.h>
int main()
{
float a=0.3;
float acceptedDiff = 0.0000001;
if(fabsf(a-0.3) < acceptedDiff)
printf("Hello World!");
else
printf("Stack Overflow");
return 0;
}
关于c - 为什么浮点值条件在“if”条件下失败? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8266878/