浮动值条件

时间:2013-03-26 13:37:23

标签: c floating-point floating-point-conversion

我制定了以下代码并得到了一个奇怪的输出。任何人都可以解释它是如何工作的吗?

main()
{
    float a=0.8;
    float b=0.25;
    if(a==0.8)
        printf("HELLO")
    if(b==0.25)
        printf("WORLD")
}

我得到的输出令人惊讶

WORLD

提前致谢

5 个答案:

答案 0 :(得分:5)

这是因为0.25是2的幂(即2 ^ -2),而0.8不是。只能精确表示两个幂的精确和;所有其他数字(包括0.8)都表示为近似值,它在floatdouble之间具有不同的精度。 0.8中的a==0.8double,而afloat。他们的陈述是不同的,他们的价值也是如此。

答案 1 :(得分:3)

您绝不能像过去那样将float - 值与绝对值进行比较。通常存在轻微的舍入误差,因为浮点数根据IEEE 754表示,并且机器无法提供精确的浮点值。

查看here以了解您的解释,尤其是舍入规则。

答案 2 :(得分:2)

你正在比较浮动与双重。尝试在数字后加上一个f

if(a==0.8f)
    printf("HELLO")
if(b==0.25f)
    printf("WORLD")

答案 3 :(得分:0)

给出的答案是正确的......在Dobb博士的Andrew Koenig正在写关于与浮动的订单关系,有一个观点:

its-hard-to-compare-floating-point-numbers

comparing-an-integer-with-a-floating-point1

答案 4 :(得分:0)

所有东西最终都以比特存储....所以浮点数会被圆整,以防它们的二进制等值重现......