对于我的计算机体系结构类,我必须做以下简单的练习:
将数字-1,1转换为IEEE 754单精度浮点格式,然后将二进制数转换为十六进制。
这个练习的解决方案似乎是0xbf8ccccd,但我很难理解为什么十六进制数字的最后一位是d而不是c。
我似乎犯了错误的一步是,我试图将数字的小数部分-1.1转换为二进制。具体来说,我首先取0.1,然后乘以2,每次都保存整数部分。
在某一点之后,我看到某种模式出现了。这种模式是1100,它的出现是因为我们从0.4开始,经过几次乘法运算后再次以0.4结束。
使用这种方法,我得到了一个数字,0001100110011001100。
根据在线转换器,从练习结果可以看出,0.1的正确二进制表示为0.000110011001101。
有人知道为什么这个模式在最后被打破,以及我思考过程中的错误在哪里吗?
提前感谢!
将数字-1,1转换为IEEE 754单精度浮点格式。
这是不可能的完全。所有IEEE 754单精度浮点都是2的幂的整数(最多24位(。
-1.1和0.1不能这样表示。
两个最接近0.1的候选者:
0.0999999940395355224609375
0.100000001490116119384765625 <-- closer
知道为什么模式在最后被打破,以及我思考过程中的错误在哪里?
当OP尝试";我首先取0.1,乘以2,每次保存整数部分&";,得出的数学模式是:
0001100110011001100110011001100... without end.
然而,由于二进制32具有24位有效精度,因此使用四舍五入的值
123456789012345678901234
0001100110011001100110011001100...
rounds to
000110011001100110011001101
模式被破坏,因为使用了取整值。