0

我想我知道如何将十进制数转换为 IEEE 754 单精度浮点表示,但我想确定一下。

我想在 IEEE 754 单精度浮点表示中表示 3.398860921 x 10^18。我知道如何浮动代表。被打破了。

第 31 位:符号(0 表示 +,1 表示 -) 第 30-23 位:表示指数 第 22-0 位:表示尾数(有效位)

所以符号显然是0,因为它是一个正数。对于指数,我想出了这个(通过将 18 添加到 127 的偏差)并将指数表示为:1001 0001

对于 3.398860921 部分的尾数,我不断地将小数点右边的所有内容乘以 2,如果大于 1,我标记为 1,否则标记为 0。然后取新答案并再次将所有内容乘以小数点右边 2,直到我想出足够的位来填充尾数。

所以现在我有: 0 | 1001 0001 | 0110 0110 0001 1011 1011 111

因此,当我将其转换为十六进制时,我得到 0x48B30DDF 但这与我在 3.398860921 x 10^18 中开始的数字不同

应该是这样还是我在某个地方犯了错误?任何帮助将不胜感激。

4

1 回答 1

1

IEEE 754 表示不能使用十进制指数。IEEE 754 需要一个二进制指数,即当数字表示为 1.xxx… * 2 p 时的数字p

而且你不能使用从十进制科学计数法直接转换为二进制的尾数,因为它只对十进制指数有意义,你不能直接使用。

该算法是将整个数字转换为二进制,然后,然后,仅对于有效位,采用前导位之后的 23 位。对于指数,计算前导位的位置。

对于您的特定值 3.398860921 x 10 18 ,根据Wolfram Alpha,二进制表示为 1.0111100101011001011011111111111101101001010010111101×2 61

这意味着无偏指数是61和省略了前导位的暂定有效数是01111001010110010110111。您可以计算从十进制到浮点的转换误差为 0.0000000000000000000000011111111101101001010010111101×2 61,并且由于此误差大于 ULP 的一半,除非您有理由更喜欢向下舍入,否则应该在以获取与原始数字最接近的单精度值,以十进制表示。

于 2013-11-05T01:06:27.433 回答