浮点比较

时间:2018-11-27 18:56:36

标签: c if-statement floating-point double single-precision

#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,但显示的是“更少”。

请注意,根本没有算术。

1 个答案:

答案 0 :(得分:4)

ffloat时,您所有的文字都是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?