设浮点数 A=As ×2Ea ,B=Bs ×2Eb 则
和数 C=(As ×2Ea-Eb+Bs )×2Eb ,差 D=(As ×2Ea -Eb -Bs )×2Eb(若Ea ≤Eb )
或者:
和数 C=(As ×Bs ×2Eb -Eb )×2Ea ,差 D=(As -Bs ×2Eb -Ea )×2Ea (若Ea >Eb )一般说来,浮点数的加、减运算有如下几个步骤:
(1)检测A和B中有无0,若A=0,则C=B,若B=0,则C=A。运算结束。
(2)计算两数阶码之差,即d=Ea -Eb ,若d>0,则将尾数Bs 向右移d位,若d<0,则将尾数A s 向右移-d位,若d=0,则As 和Bs 均不移位。这个过程叫做“对阶”。
(3)两尾数相加或相减。
(4)把结果进行规格化。对于Pentium微处理器来说,若结果尾数绝对值小于1,则尾数不断左移且阶码不断减1,直至尾数绝对值大于或等于1;若结果尾数绝对值大于或等于2,则尾数右移1位且阶码加1。
注意:两浮点数加/减时,在结果规格化的过程中,可能会发生“上溢”或“下溢”。浮点数的乘/除法比加/减法稍简单一些,其公式为:
乘积=(As ×Bs )×2Ea +Eb 商=(As /Bs )×2Ea +Eb 处理过程如下:
(1)检测A和B中有无0,若AS =0,则乘积(商)=0,运算结束;若BS =0,乘法时乘积=0,除法时商为∞,运算结束
(2)计算两数阶码之和(或差)。(3)两尾数相乘或相除。
(4)把结果进行规格化。即,若结果尾数绝对值小于1,则尾数不断左移且阶码不断减1;若结果尾数绝对值大于或等于2,则尾数右移且阶码加1。
注意:两浮点数乘/除时,在阶码相加(减)的过程中,或者在结果规格化的过程中,可能会发生“上溢”或“下溢”。
浮点数运算过程中,为了保证浮点数运算的精度,当尾数右移时,对移出的位还需进行“舍入”处理。