如何将二进制浮点数转换为小数?
How to convert binary floating points to decimal fractions?
我被困在家庭作业中;我需要将二进制浮点数转换为小数。我觉得我了解这个过程,但我没有得到正确的答案。这是我的思考过程。
我有二进制浮点数: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 的答案;我不知道为什么会这样。
在 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
我被困在家庭作业中;我需要将二进制浮点数转换为小数。我觉得我了解这个过程,但我没有得到正确的答案。这是我的思考过程。
我有二进制浮点数: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 的答案;我不知道为什么会这样。
在 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