Floating point 浮点加减法
执行浮点二进制数加法时,通常会更改较小的指数以匹配较大的指数,然后相应地调整尾数。尾数对齐后,可以将它们相加。然后,如有必要,对结果进行归一化处理Floating point 浮点加减法,floating-point,Floating Point,执行浮点二进制数加法时,通常会更改较小的指数以匹配较大的指数,然后相应地调整尾数。尾数对齐后,可以将它们相加。然后,如有必要,对结果进行归一化处理 为什么我们通常会调整较小的指数以匹配较大的指数?什么不是反过来?手动执行这些计算时,无论采用何种方法,结果都是相同的。当添加具有相同符号的数字(或减去具有相反符号的数字)时,结果与较大的操作数或一个以上的操作数具有相同的指数(根据是否发生进位)。因此,如果调整较小的数字以匹配较大的数字,则需要进行的移位较少 使用相同符号的数字减法(或相反符号的数字相
为什么我们通常会调整较小的指数以匹配较大的指数?什么不是反过来?手动执行这些计算时,无论采用何种方法,结果都是相同的。当添加具有相同符号的数字(或减去具有相反符号的数字)时,结果与较大的操作数或一个以上的操作数具有相同的指数(根据是否发生进位)。因此,如果调整较小的数字以匹配较大的数字,则需要进行的移位较少 使用相同符号的数字减法(或相反符号的数字相加),取消可以将前导数字保留在不同的位置,因此选择之间的差异可能较小。但是,如果调整较小的数字以匹配较大的数字,则只需要在一个方向上移动。如果调整了较大值,则需要另外决定需要向哪个方向移动 为什么我们通常会调整较小的指数以匹配较大的指数 这可能比调整较大的值要省力,因为可以简化调整较小的值
“然后相应地调整尾数”不仅仅是一个移位 考虑使用
n
位有效位和expo(a)>=expo(b)
对规范化a、b
进行加减
使用a
的有效位的所有n
位
b
的指数与较大的a
的指数相同,较小的b
有效位移位,但可能并非所有有效位都被明确记住。除了保持与a
对齐的b
位外,还将记住2个移出位,并将所有其他位的“或”移出
例如,b
shift(right)n-6
places
1.23456789….......n
a.aaaaaaaa…aaaaaaaa 000
0.00000000…00bbbbbb bbz (z is the “or” of all the less significant bits)
aa aaaaaaaa a.aaaaaa00…00000000
b.bbbbbbbb…bbbbbbbb
现在,可以使用n+3+1
1位数学进行加法/减法运算。在所有舍入模式下,2个移出位和z
足以形成预期的和/差
1+1表示溢出
如果不进行这种简化,则需要比
n+3
位更宽的整数数学。甚至可能有100个比特
例如,a
移位(左)n-6
位置
1.23456789….......n
a.aaaaaaaa…aaaaaaaa 000
0.00000000…00bbbbbb bbz (z is the “or” of all the less significant bits)
aa aaaaaaaa a.aaaaaa00…00000000
b.bbbbbbbb…bbbbbbbb