为什么这两个程序的输出在C语言中不同?

为什么这两个程序的输出在C语言中不同?,c,C,方案1: #include<stdio.h> int main(){ float x = 0.1; if (x == 0.1) printf("IF"); else if (x == 0.1f) printf("ELSE IF"); else printf("ELSE"); return 0; } 方案2: #include<stdio.h> int main{ float x =

方案1:

#include<stdio.h>
int main(){
    float x = 0.1;
    if (x == 0.1)
        printf("IF");
    else if (x == 0.1f)
        printf("ELSE IF");
    else
    printf("ELSE");
    return 0;
}
方案2:

#include<stdio.h>
int main{
    float x = 0.5;
    if (x == 0.5)
        printf("IF");
    else if (x == 0.5f) 
        printf("ELSE IF");
    else
        printf("ELSE");
    return 0;
}
第一个程序输出:ELSE IF 第二个程序输出:如果


两个程序非常相似。但输出不同。为什么?

可能是由于浮点精度错误。使用==来比较浮动不是一个好主意。如果是C,为什么要标记这个问题?这是一件非常奇怪的事情。我更怀疑的是,我找不到任何-O或-f标志来生成第一个程序输出IF。毕竟,编译器支持所有类型的其他不安全优化标志。省略f会使您的文字数字加倍。浮点数可能不完全等于用双精度表示的相同值。