【问题标题】:Why is this floating point comparison true? [duplicate]为什么这个浮点比较是真的? [复制]
【发布时间】:2011-10-31 08:16:45
【问题描述】:

可能重复:
Floating point comparison

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

输出:如果

为什么会这样?

#include <stdio.h>

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

【问题讨论】:

标签: c


【解决方案1】:

您的程序将0.7double 表示(这是您在程序中编写0.7 时编译器生成的)与0.7float 表示(即变量a包含)。两者不一样,刚好double的大一点。

编辑:(float)0.7 可以用十六进制表示法紧凑地表示。它是0x1.666666p-10.7 作为double 常量是0x1.6666666666666p-1,所以它略大。

【讨论】:

    【解决方案2】:

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

    float a = 0.7;
    

    作为

    float a = 0.69999....;
    

    这是因为您的平台上浮点的内部表示。 Daniel 提供的link 应该可以帮助您入门。

    【讨论】:

    • 这仍然不能回答为什么
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2011-03-10
      • 2013-07-16
      • 1970-01-01
      相关资源
      最近更新 更多