我有一些由 gcc(gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13)) 编译的执行高精度算术的 C 代码。计算的最终结果是一个 double 值,其值为 622.07999995861189。我是将双精度型转换为浮点数。
频率值=(浮点数)当前频率;
其中 current_freq 是双精度型,Frequency_value 是浮点型。转换后的Frequency_value 值为 622.080017。我预计该值为 622.079956,在 gdb 中计算为
(gdb) p (浮点)current_freq
1 美元 = 622.079956
谁能解释一下 gcc 和 gdb 计算的值之间的巨大差异。
float 的精度比 double 低得多;你会丢失大约一半的数字。因此,您最多只能看到 622.0799 部分(四舍五入为 622.0800)。您看到的差异可能是由使用的舍入模式引起的。
以下是实际数字:
- 作为双倍:622.0799999586118929073563776910305023193359375
- 作为浮点数:622.08001708984375(内部表示:1142654239)
- 前一个浮动:622.0799560546875(内部表示:1142654238)
内部表示是使用 Java 生成的值Float.floatToIntBits
。您还可以使用Float.intBitsToFloat
返回一个浮点数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)