如何将二进制浮点数转换为小数?

时间:2017-09-09 01:45:20

标签: assembly binary floating-point ieee-754

我被困在家庭作业上;我需要将二进制浮点数转换为小数点。我觉得我理解这个过程,但我没有得到正确的答案。这是我的思考过程。

我有二进制浮点数:0 000 101

  • 3位指数字段的偏差为3:2^(3-1)-1 = 3
  • 尾数变为1.101(基数2)
  • 指数位0的值减去指数位数3,为-3,因此尾数的小数位左移3位 0.001101
  • 在基数10中,即2^-3 + 2^-4 + 2^-6,等于0.203125或13/64。

然而,13/64不是正确答案,自动评分者不接受它。如果我的答案是错的,那我就不明白为什么,我希望有人能指出我正确的方向。

凭借纯粹的运气,我猜到了5/32作为答案,并且纠正了它;我不知道为什么会这样。

1 个答案:

答案 0 :(得分:4)

在IEEE-754浮点格式中, exponent = 0是非正规的,其中尾数中隐含的前导位为0

维基百科有一篇关于single-precision float (binary32)格式的详细文章,有很多例子。对于binary32 float,公式是(来自wiki文章):

(−1)^signbit × 2^(−126)        × 0.significandbits   ; denormal, expbits=0
(−1)^signbit × 2^(expbits−127) × 1.significandbits   ; normal
 Inf  or  NaN (depending on mantissa aka significant); expbits = all 1s

(注意0.0是非正规的特殊情况,但实际上并不被认为是非正规)。

无论如何,如果指数为零,请注意指数不再是expbits - bias,而是指数更高。

回到你的情况:你的尾数是0.101二进制,0.625十进制(我将0b101 / 8插入calc)。

2 ^ -2 * 0.101(二进制)= 2 ^ -2 * 0.625(十进制)= 0.15625 = 5/32

有一篇https://en.wikipedia.org/wiki/Minifloat维基百科文章,其中提到(带有示例)8位IEEE格式,以及计算机图形硬件上现实生活中使用的其他一些不到32位格式。 (例如24位或16位)。有趣的事实:x86可以加载/存储16位半精度浮点数的向量,使用F16C ISA extension即时转换为单个寄存器中的单个。

另请参见此在线转换器,其中包含以下复选框:https://www.h-schmidt.net/FloatConverter/IEEE754.html