我对在二进制文件中添加两个浮点数有一些疑问。谁能告诉我我做错了哪一步?
以下是两个浮点数
<Link/>
第一步。对齐指数(需要与大对齐)
sign exponent fraction
1 11101101 10000001101000011010011
0 11101110 01010100001001110010110
第二步。四舍五入(因为我向右移动并忽略number = 1/2,并且最低有效位是1,所以我们需要加1)
PS:此舍入规则位于视频https://www.youtube.com/watch?v=wbxSTxhTmrs上 当9:33
第三步。加法(分数部分)
1 11101110 11000000110100001101001 (exponet + 1 and shift right)
0 11101110 01010100001001110010110
最后
因为 1.01010100001001110010110
- 0.11000000110100001101010 (add 1 for rounding up)
-------------------------------------------
1.00100110101011001011000
被归一化,所以分数是1.00100110101011001011000
,指数是00100110101011001011000
但指数答案为11101110
,分数为11101101
我的每一步有什么问题吗?谢谢。
答案 0 :(得分:2)
您的计算中有几个错误,主要是忘记隐藏的位,并对不正确数量的位执行计算。
/target
步骤1:
添加隐藏的位
对齐指数
传递给补码表示形式
请注意,当您用2的补码替换符号绝对值时,您需要多一位。
A:1 11101101 (1).10000001101000011010011
B:0 11101110 (1).01010100001001110010110
第2步:执行添加操作
由于您的结果可能> 1(或(<-2),因此必须用操作数符号扩展的额外位来完成。您不应该在之前进行操作数舍入。如果操作数接近且符号不同,则可能松散的精度位。
A=exp(11101110) -(00.110000001101000011010011)
=exp(11101110) 11.001111110010111100101101
B=exp(11101110) 01.01010100001001110010110
第3步:重新规范化以获得介于1和2之间的数字,调整指数并转换数字以签署绝对表示形式。
(ca) 11 11111 1 1111 1 11
111.001111110010111100101101
+001.01010100001001110010110
-----------------------------
000.100100110101011001011001
第4步:对结果取整并在需要时重新归一化。
(在这里什么也没做)。
所以m =(1).00100110101011001011001 exp = 11101101
它给出了预期的结果。而且可以仔细检查。
m=1.00100110101011001011001 exp=exp-1=11101101