浮动值条件

Asw*_*esh 0 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")
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出令人惊讶

WORLD
Run Code Online (Sandbox Code Playgroud)

提前致谢

das*_*ght 5

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