问题是: x和y是32位IEEE浮点格式的两个浮点数 (偏置为127的8位指数),其二进制表示如下:
x:1 10000001 000101000000000000000000
y:0 10000010 00100001000000000000000
计算它们的乘积z = x y并以二进制IEEE浮点格式给出结果。
所以我发现X = -4.3125。 y = 9.03125。我可以将它们相乘并得到-38.947265625。我不知道如何以IEEE格式显示它。在此先感谢您的帮助。
答案 0 :(得分:1)
通过转换为十进制,你必须将它转换回来的方式变得更难了。并不是说不能这样做,而是手工操作更难。
没有转换,将两个浮点数相乘的算法是(大致)这个:
所以在这里,乘以(如果你忘了,查看二进制乘法如何工作)
1.00010100000000000000000 *
1.00100001000000000000000 =
1.00100001000000000000000 +
0.000100100001000000000000000 +
0.00000100100001000000000000000 =
1.00110111100101000000000000000
添加指数(记住偏见),在这种情况下2 + 3 = 5,所以132 = 10000100。
Xor的迹象,得到1。
不需要舍入,因为丢弃的位总是为零。
结果:1 10000100 00110111100101000000000
答案 1 :(得分:1)
我同意评论它应该以二进制形式完成,而不是通过转换为十进制和十进制乘法。我用Exploring Binary来做算术。
第一步是找到实际的二进制有效数。两个输入都不是正常的,因此它们是1.000101和1.00100001。
将它们相乘,得到1.00110111100101。
同样地,从指数中减去偏差二进制1111111,得到10和11.加上那些,得到101,然后加回偏差,10000100。
用于将两个数字乘以不同符号位的符号位将为1.
现在将它们全部打包在一起。 signficand出现在[1,2]范围内,因此无需标准化和调整指数。我们仍处于正常范围内,因此在有效数字中的二进制点之前删除1。有效位数足够窄,无需舍入 - 只需添加足够的尾随零。
1 10000100 00110111100101000000000