2. 浮点乘除法运算步骤

  两个浮点数相乘,其乘积的阶码应为相乘的两个数的阶码之和,其尾数应为相乘二数的尾数之积。
  两个浮点数相除,商的阶码应为被除数的阶码减去除数的阶码得到的差,尾数应为被除数的尾数除以除数的尾数所得的商。
  乘除运算都可能出现结果溢出,或结果不满足规格化要求的问题,因此也必须进行这些检查和处理。与加减法运算类似的是,乘除法的浮点数运算也有个精度处理要求,舍入矛盾似乎更突出一点。下面就阶码运算和尾数舍入问题进行讨论。

  (1)浮点数的阶码运算
  对阶码的运算主要有 +1、-1、两阶码求和或两阶码求差四种,运算时还必须检查结果是否溢出。在计算机中,阶码通常用移码(或补码)形式表示。补码运算规则和判定溢出的方法,前一节已说明过了。这里只需对移码的运算规则和判定溢出的方法进行讲解。

  移码的定义为
  [X] = 2n + X    -2n ≤X < 2n (Mod 2n+1
 
  按此定义,则有
  [X] + [Y] = 2n + X + 2n + Y = 2n + (2n + X + Y)
         = 2n + [ X + Y ]

  即直接用移码实现求阶码之和时,结果的最高位(符号位)多加了个1,要得到移码形式的结果,必须对结果的符号再执行一次求反操作。

  考虑到对同一个数值,移码和补码的关系是,其数值位完全相同,而符号位正好相反。即[Y]补的定义为
  [Y] = 2n+1 + Y

  则很容易想到, 也可以用如下方式完成求阶码和的运算:
  [X] + [Y] = 2n+ X + 2n+1 + Y
         = 2n+1 + (2n + (X + Y)) (按2n+1 取模)
         = [ X + Y ]

  同理有[X] + [-Y] = [ X - Y ]。实际上这表明执行阶码加减运算时,对加数或减数送的是移码符号位正常该送的值的反码。

  如果阶码运算的结果溢出,上述条件则不成立。此时,对使用双符号位的阶码加法器,规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是最高符号位为1。此时,当低位符号位为0时,表明结果上溢,为1时,表明结果下溢。当最高符号位为0时,表明没有溢出,低位符号位为1,表明结果为正,为0时,表明结果为负。例如,假定阶码用四位表示,则其表示范围为-8到+7。看如下四种情况:

  当 X = +011 , Y = +110 时,则有
  [X]移 = 01 011, [Y] = 00 110, [-Y]=11 010
   [ X + Y ] =[X] + [Y] = 10 001, 是结果上溢
   [ X - Y ] =[X] + [-Y] = 00 101, 结果正确,为-3

  当 X = -011 , Y = -110时,则有
  [X] = 00 101, [Y] = 11 010, [-Y]=00 110
   [ X + Y ] =[X] + [Y] = 11 111, 是结果下溢
   [ X - Y ] =[X] + [-Y] = 01 011, 结果正确,为-3