我被困在家庭作业上;我需要将二进制浮点数转换为小数点。我觉得我理解这个过程,但我没有得到正确的答案。这是我的思考过程。
我有二进制浮点数:0 000 101
2^(3-1)-1 = 3
1.101
(基数2)0.001101
2^-3 + 2^-4 + 2^-6
,等于0.203125或13/64。然而,13/64不是正确答案,自动评分者不接受它。如果我的答案是错的,那我就不明白为什么,我希望有人能指出我正确的方向。
凭借纯粹的运气,我猜到了5/32作为答案,并且纠正了它;我不知道为什么会这样。
答案 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