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

How to convert binary floating points to decimal fractions?

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

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

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

幸运的是,我猜对了 5/32 的答案;我不知道为什么会这样。

在 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 wikipedia article, which mentions (with examples) an 8-bit IEEE format, as well as some other less-than-32-bit formats used in real life on computer-graphics hardware. (e.g. 24-bit or 16-bit). Fun fact: x86 can load/store vectors of 16-bit half-precision floats, converting to/from single in registers on the fly with the F16C ISA extension.

另请参阅带有位复选框的在线转换器:https://www.h-schmidt.net/FloatConverter/IEEE754.html