浮点数的加减运算

前言

浮点数的加减运算大体可以分为五步。
浮点数的加减运算

我们用一个实例来逐步体会做法。

题目:

X=0.1101 × 2+10 ,Y= - 0.1111×211,采用浮点数规格化形式求X+Y=?其中阶码4位(含阶符1位),用补码表示,尾数6位(含尾符1位)。 在舍入时采用0舍1入法。

对X和Y进行表示:

阶码 尾符 尾数(补码形式)
[X]浮 0010 0 11010
[Y]浮 0011 1 00010

1.对阶操作

两个浮点数在运算前,一定要保证阶相同,所以我们应先对阶。

一般采用小阶对大阶的做法。

小阶对大阶时,小阶的阶码增大,且相应尾数应右移。

例如对于例题, X的阶码小,故应该让X的阶码增大到与Y的阶码相同,且X的尾数右移相应位数。对阶完成后如下所示:

阶码 尾符 尾数(补码形式)
[X]浮 0011 0 01101
[Y]浮 0011 1 00010

2.尾数相加减

在对阶完成后,我们需要根据题目要求进行加减。

需要注意的是为防止溢出我们通过双符号判别法来进行加减运算,即把符号位写成双符号。这样符号位亦参与运算,可根据最后符号位判断是否有溢出,是什么溢出。

例如对于例题
[X]尾+[Y]尾=00 01101+11 00010=11 01111(加粗的是双符号位)

因为最终双符号位是11,所以没有溢出。

所以[X]浮+[Y]浮 =0011 1 01111

红色的是阶码,黑色的是尾符,蓝色的是尾数。

3.规格化处理

若尾数是用补码表示,则应该左移,使得尾符和尾数数据位的最高位相反。

若尾数是用原码表示,则应该使得尾数 数值最高位为1。

对于本例题,尾数 01111 是用补码表示,且尾符是1 , 尾数最高位为0,则无需进行规格化处理。

4.舍入操作

无论是对阶或者其他尾数需要向右移位时,都会舍弃尾数的最低位,一般在舍入时我们把最后移掉的那一位保存起来。

舍入处理有两种方法

  • 0舍1入法:如果当时最后舍去的是0,则无需处理。若当时最后舍去的是1,则应在最低位+1.
  • 末位置1法:不管最后舍去的是0还是1,只要曾舍去,都应令最后一位的数值为1.

对于本例题,刚才对阶右移舍去的是0,我们采用0舍1入法,则应无需处理。

最终结果应为0011 1 01111

5.判断结果是否溢出

根据阶码是否溢出来判断运算结果是否正确,阶码若产生下溢,则置运算结果为0,若产生上溢,则置溢出标志。

对于本例题阶码没有溢出,则最终结果应为-0.10001 × 2+11