Dey*_*eya 2 c floating-point precision if-statement floating-accuracy
float f=2.2;
if (f==2.2)
printf("abc");
else
printf("xyz");
Run Code Online (Sandbox Code Playgroud)
此代码打印xyz,而如果我们给2.5而不是2.2,则输出为abc.
2.2是在二进制浮点中不能完全表示的双精度.实际上,您将double 2.2与将其转换为float的结果进行比较,使用舍入,然后返回double.
假设double是IEEE 754 64位二进制浮点数,float是IEEE 754 32位二进制浮点数,则最接近的小数位数2.2具有精确值2.20000000000000017763568394002504646778106689453125,将其转换为float的结果为2.2000000476837158203125.将float转换回double不会改变其值.2.20000000000000017763568394002504646778106689453125不等于2.2000000476837158203125.
2.5在二进制浮点系统的float和double中都是完全可表示的,因此转换为float和转换回double都不会改变该值.2.5等于2.5.