十进制浮点数到二进制的转换
Decimal Floating Point to Binary Conversion
对于我的计算机体系结构 class 我必须做以下简单练习:
将数字-1,1转换为IEEE 754单精度浮点格式,然后将二进制数转换为十六进制。
这个练习的答案似乎是0xbf8ccccd,但我无法理解为什么十六进制数的最后一位又是d而不是c。
我似乎犯了错误的步骤是当我尝试将数字 -1.1 的小数部分转换为二进制时。具体来说,我首先取 0.1 并将其乘以 2,每次都保存整数部分。
在某一点之后,我看到某种模式出现了。这种模式是 1100,它的发生是因为我们从 0.4 开始,经过几次乘法后再次以 0.4 结束。
使用这种方法我得到了数字,0001100110011001100.
不过根据在线转换器,从练习的结果来看,0.1 的正确二进制表示是 0.0001100110011001101.
有谁知道为什么这个模式在最后被打破了,我的思维过程中的错误在哪里?
提前致谢!
Convert the number -1,1 to IEEE 754 single-precision floating-point format.
这不可能完全。所有 IEEE 754 single-precision floating-point 都是某个整数(最多 24 位)乘以 2 的某个幂。
-1.1 和 0.1 不能这样表示。
两个最接近 0.1 的候选人:
0.0999999940395355224609375
0.100000001490116119384765625 <-- closer
idea why the pattern gets broken at the very end, and where the mistake in my thinking process lies?
当 OP 尝试“我首先取 0.1 并将其乘以 2 并每次保存整数部分。”时,数学结果模式将是:
0001100110011001100110011001100... without end.
然而,由于 binary32 具有 24 位有效精度,因此使用 rounded 值
123456789012345678901234
0001100110011001100110011001100...
rounds to
000110011001100110011001101
由于使用了 rounded 值,因此模式 已损坏 。
对于我的计算机体系结构 class 我必须做以下简单练习:
将数字-1,1转换为IEEE 754单精度浮点格式,然后将二进制数转换为十六进制。
这个练习的答案似乎是0xbf8ccccd,但我无法理解为什么十六进制数的最后一位又是d而不是c。
我似乎犯了错误的步骤是当我尝试将数字 -1.1 的小数部分转换为二进制时。具体来说,我首先取 0.1 并将其乘以 2,每次都保存整数部分。
在某一点之后,我看到某种模式出现了。这种模式是 1100,它的发生是因为我们从 0.4 开始,经过几次乘法后再次以 0.4 结束。
使用这种方法我得到了数字,0001100110011001100.
不过根据在线转换器,从练习的结果来看,0.1 的正确二进制表示是 0.0001100110011001101.
有谁知道为什么这个模式在最后被打破了,我的思维过程中的错误在哪里?
提前致谢!
Convert the number -1,1 to IEEE 754 single-precision floating-point format.
这不可能完全。所有 IEEE 754 single-precision floating-point 都是某个整数(最多 24 位)乘以 2 的某个幂。
-1.1 和 0.1 不能这样表示。
两个最接近 0.1 的候选人:
0.0999999940395355224609375
0.100000001490116119384765625 <-- closer
idea why the pattern gets broken at the very end, and where the mistake in my thinking process lies?
当 OP 尝试“我首先取 0.1 并将其乘以 2 并每次保存整数部分。”时,数学结果模式将是:
0001100110011001100110011001100... without end.
然而,由于 binary32 具有 24 位有效精度,因此使用 rounded 值
123456789012345678901234
0001100110011001100110011001100...
rounds to
000110011001100110011001101
由于使用了 rounded 值,因此模式 已损坏 。