关于二进制浮点加法的一些陷阱

时间:2019-04-14 12:04:31

标签: cpu-architecture

我对在二进制文件中添加两个浮点数有一些疑问。谁能告诉我我做错了哪一步?

以下是两个浮点数

<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

我的每一步有什么问题吗?谢谢。

1 个答案:

答案 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