#include <stdio.h>
int main()
{
float f;
f = 0.4;
if(f<0.4)
printf("It is less");
if(f>0.4)
printf("It is greater");
if(f==0.4)
printf("It is equal");
}
我不知道为什么输出显示为“更大”。
我得到0.4转换为二进制表示形式是0x3ECCCCCD,它是4.000000059604644775390625E-1。 疑问是f是否存储了该舍入值,为什么比较中的0.4是精确的。如果f和0.4均取整,则输出应为“ It equal”。
我尝试用f = 0.5表示“等于”。
虽然f = 0.9,但显示的是“更少”。
请注意,根本没有算术。
答案 0 :(得分:4)
f
是float
时,您所有的文字都是double
。
如果您问得很好,请the compiler will even warn you about the assignment:
警告:从“ double”到“ float”的转换将值从“ 4.0000000000000002e-1”更改为“ 4.00000006e-1f” [-Wfloat-conversion]
不幸的是,它无法警告比较,因为简单地扩大较小的类型几乎总是您想要的,因此已被编纂。
无论如何,浮点数学对于初学者来说是危险的,而且令人惊讶:
Is floating point math broken?