为什么这两个程序的输出在C语言中不同?
方案1:为什么这两个程序的输出在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 =
#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会使您的文字数字加倍。浮点数可能不完全等于用双精度表示的相同值。