为什么浮点值条件在'if'条件下失败?

Din*_*esh 0 c if-statement

可能重复:
与float文字的float比较中的奇怪输出

这是代码

#include<stdio.h>
int main()
{
 float a=0.3;
 if(a==0.3)
  printf("Hello World!");
 else
  printf("Stack Overflow");
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期望输出为"Hello World".但我得到了"堆栈溢出".为什么我没有得到"Hello World"?

if情况有什么不对吗?

Mic*_*aga 5

比较浮点数

浮点数学并不准确.像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;
}
Run Code Online (Sandbox Code Playgroud)