为什么这个浮点比较是真的?

时间:2011-10-31 08:16:45

标签: c

  

可能重复:
  Floating point comparison

当我运行下面的代码时,我得到以下输出:

输出:if

为什么会这样?

#include <stdio.h>

void main()
{
    float a = 0.7;
    if(a<0.7)
    {
        printf("if");
    }
    else
    {
        printf("Else");
    }
}

3 个答案:

答案 0 :(得分:3)

您的程序会比较double 0.7的{​​{1}}表示形式(这是编译器在您的程序中编写0.7时产生的)float表示{{1} (变量0.7包含的变量)。两者不一样,只是a一个略大。

编辑:double可以用十六进制表示法紧凑表示。它是(float)0.70x1.666666p-1 0.7常量为double,因此 稍大。

答案 1 :(得分:2)

浮点数不会以精确格式存储。最有可能的是,您的平台解释

float a = 0.7;

作为

float a = 0.69999....;

这是因为平台上浮点的内部表示。丹尼尔提供的link应该让你开始。

答案 2 :(得分:0)

这是由于计算机上浮点表示的准确性问题。请参阅this Wikipedia article