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