【发布时间】:2019-06-07 16:53:46
【问题描述】:
我有两个代码 sn-ps 并且都产生不同的结果。我正在使用 TDM-GCC 4.9.2 编译器,我的编译器是 32 位版本
( int 的大小为 4 个字节,float 的最小值为 -3.4e38 )
代码 1:
int x;
x=2.999999999999999; // 15 '9s' after decimal point
printf("%d",x);
输出:
2
代码 2:
int x;
x=2.9999999999999999; // 16 '9s' after decimal point
printf("%d",x);
输出:
3
为什么这些情况下的隐式转换不同?
是否由于指定的 Real 常量中的一些溢出,如果是,它是如何发生的?
【问题讨论】:
-
@ThomasJager 不。该问题仅讨论浮点算术而不是类型转换为 int。
-
它将浮点数表示为最接近的可表示值。
-
@ThomasJager 感谢您的提及
-
注意:
2.999999999999999和2.9999999999999999都是 'double' 值,而不是 'float' 要使它们成为 'float',它们应该写成:2.999999999999999f和2.9999999999999999f注意尾随'F'。因此,您实际上使用的是double值,而不是float值
标签: c implicit-conversion