浮点加法和减法

时间:2018-05-16 09:17:15

标签: floating-point

执行浮点二进制数的加法时,通常会更改较小的指数以匹配较大的指数,然后相应地调整尾数。一旦尾蝠对齐,它们可以加在一起。然后在必要时对结果进行标准化。

为什么我们通常会调整较小的指数以匹配较大的指数?什么不相反?当手动执行这些计算时,无论采用何种方法,结果都是相同的。

2 个答案:

答案 0 :(得分:2)

当添加具有相同符号的数字(或减去具有相反符号的数字)时,结果具有与较大操作数相同的指数或一个(根据是否发生进位)。因此,如果调整较小的数字以匹配较大的数字,则可以做更少的转移。

通过减去具有相同符号的数字(或添加相反符号的数字),取消可以将前导数字保留在各种位置,因此选择之间的差异可能较小。但是,如果调整较小的数字以匹配较大的数字,则仅需要在一个方向上移位。如果调整幅度较大,则需要做出额外决定,以确定需要转换的方向。

答案 1 :(得分:1)

  

为什么我们通常会调整较小的指数以匹配较大的指数?

调整较大的值可能比调整较大的值要少,因为可以通过调整较小的值进行简化。

“然后相应地调整尾数”比只有一个班次更多。

考虑使用a,b位有效数和n加上/减去规范化 expo(a) >= expo(b)

使用n有效位的所有a位。

b的指数与较大的a相同,而较小的b有效数字会被移位,但可能并非全部都被明确记住。除了与b保持对齐的a位之外,还会记住2个移出的位,并且所有其他位的“或”移出

示例,b移位(右)n-6个位置。

1.23456789….......n 
a.aaaaaaaa…aaaaaaaa 000
0.00000000…00bbbbbb bbz (z is the “or” of all the less significant bits)

现在可以使用n+3+1 1 位数学运算来执行加法/减法。在所有舍入模式下,2个移出的位和z足以形成预期的和/差。

1 +1溢出。

如果没有这种简化,则需要比n+3位整数数学宽得多的数学。甚至可能是100多位。

示例,a移位(左)n-6个位置。

aa aaaaaaaa a.aaaaaa00…00000000
            b.bbbbbbbb…bbbbbbbb