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/

10-11 23:14
查看更多