我有一个测试用双和浮在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.请给我解释一下.
x == 3.4应该是x == 3.4F,否则3.4是双倍(默认情况下).总是比较像喜欢,而不是苹果和橘子.
编辑:不同精度类型之间的比较结果是true还是false取决于编译器的浮点表示.
浮点数,无论是单精度(浮点)还是双精度,都是近似值.
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
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |