C:使用float和double时出现奇怪的错误

hqt*_*hqt -1 c floating-point

可能重复:
float与float literal的比较中的奇怪输出
float和double变量的比较

我有一个测试用双和浮在C,但我无法解释为什么.

    float x = 3.4F;
    if(x==3.4)
        printf("true\n");
    else printf("false\n");
    double y = 3.4;
    if (y==3.4)
        printf("true\n");
    else printf("false\n");
Run Code Online (Sandbox Code Playgroud)

结果将为False和True.请给我解释一下.

cda*_*rke 5

x == 3.4应该是x == 3.4F,否则3.4是双倍(默认情况下).总是比较像喜欢,而不是苹果和橘子.

编辑:不同精度类型之间的比较结果是true还是false取决于编译器的浮点表示.

浮点数,无论是单精度(浮点)还是双精度,都是近似值.


Ste*_*sop 5

3.4不能精确表示为双为同样的原因,三分之一不能精确表示为使用数字的有限数目的碱基 - 10十进制数 - 表示复发.

因此,double literal 3.4实际上是最接近3.4的double值.3.4F是最接近3.4的浮点值,但它与最接近的double值不同.

将float与double进行比较时,float将转换为double,而不会更改其值.

因此3.4F != 3.4,就像0.3333 != 0.33333333