【发布时间】:2020-07-02 14:29:52
【问题描述】:
以下代码的输出为0.0000000:
#include <stdio.h>
int main() {
float x;
x = (float)3.3 == 3.3;
printf("%f", x);
return 0;
}
而这段代码输出1.000000:
int main() {
float x;
x = (float)3.5 == 3.5;
printf("%f", x);
return 0;
}
这两个代码的唯一区别是比较中的值,但是结果不一样,这是为什么呢?
【问题讨论】:
-
此代码输出为 1. int main(){ float x; x=(浮点数)3.5==3.5; printf("%f",x);返回0; } Ans 1.00 // 为什么这个输出是 1
-
代码应该在问题中,而不是在 cmets 中。
-
也许第二个
3.3是double,它有不同的位表示。 -
3.3的值不能用浮点数精确表示。当3.3转换为float时,会丢失一些精度。将结果与3.3(即double常量)进行比较时,将其转换回double,但不会恢复丢失的精度,因此两个值比较不相等。 -
请注意,
(float)3.3==3.3等价于((float)3.3)==3.3,这可能不是您想要的。比较的结果是一个整数,在赋值时会隐式转换为float。这与(float)(3.3==3.3)完全不同。
标签: c floating-point double