浮点数的乘除运算
我们学习了浮点数的加减法运算,乘除法运算的掌握当然也是比较容易的,下面是一些有关浮点数乘除法运算的相关知识点的总结。
浮点数乘除法的运算规则
运算规则:两个浮点数相乘,乘积的阶码应为相乘两数的阶码之和,乘积的尾数应为相乘两数的尾数之积。两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码,尾数为被除数的尾数除以除数的尾数所得的商,下面用数学公式来描述。
假设有两个浮点数x和y:
x=Sxx r^jx
y=Syx r^jy
那么有
xy=(Sx xSy)x r^ (r^jx+ r^jy)
x/y=(Sx /Sy))x r^ (r^jx+ r^jy)
我们可以看出,浮点数乘除运算不存在两个数的对阶问题,故比浮点数的加减法还要简单。
提醒:在运算过程中,需要考虑规格化和舍入问题。
浮点数乘除法运算步骤
浮点数的乘除运算可归纳为以下4个步骤。
第一步: 0操作数检查。
对于乘法:检测两个尾数中是否一一个为0,若有一个为0,则乘积必为0,不再做其他操作;若两尾数均不为0, 则可进行乘法运算。
对于除法:若被除数x为0,则商为0;若除数y为0,则商为∞,另作处理。若两尾数均不为0,则可进行除法运算。
第二步:阶码加减操作。
在浮点乘除法中,对阶码的运算只有4种,即+1、-1、两阶码求和以及两阶码求差。当然,在运算的过程中,还要检查是否有溢出,因为两个同号的阶码相加或异号的阶码相减可能产生溢出。
第三步:尾数乘/除操作。
对于乘法:第2章讲解了非常多的定点小数乘法算法,两个浮点数的尾数相乘可以随意选取一种定点小数乘法运算来完成。
对于除法:同上。
第四步:结果规格化及舍入处理。
可以直接采用浮点数加减法的规格化和舍入处理方式。主要有以下两种:
1)第一种:无条件地丢掉正常尾数最低位之后的全部数值。这种办法被称为截断处理,其好处是处理简单,缺点是影响结果的精度。
2)第二种:运算过程中保留右移中移出的若干高位的值,最后再按某种规则用这些位上的值进行修正尾数。这种处理方法被称为舍入处理。
当尾数用原码表示时,舍入规则比较简单。最简便的方法是,只要尾数的最低位为1,或移出的几位中有为1的数值,就使最低位的值为1.另一种是0舍1入法,即当丢失的最高位的值为1时,把这个1加到最低数值位上进行修正。
当尾数用补码表示时,所用的舍入规则应该与用原码表示时产生相同的处理效果。具体规则是:
1)当丢失的各位均为0时,不必舍入。
2)当丢失的各位数中的最高位为0,且以下各位不全为0时,或者丢失的最高位为1,
3)当丢失的最高位为1,以下各位不全为0时,执行在尾数最低位加1的修正操作。
我们依旧根据例题来加深我们对其的理解:
【例1】假设, 分别有如下补码(尾数): 1100001.11100000 1110101010111100试对上述4个补码进行只保留小数点后4位有效数字的舍入操作。
解析:对于1.01110000,由于待丢失的后4位全为0,因此应该遵循规则1),当丢失的各位均为0时,不必舍入。因此,舍入后的补码为1.0111。
对于1.01111000,待丢失的后4位为100与规则2)相吻合,即丢失的最高位为1,以下各位均为0时,舍去丢失位上的值。因此,舍入后的补码为1.0111。
对于1.01110101,待丢失的后4位为0101,与规则2)相吻合,即当丢失的各位数中的最高位为0,且以下各位不全为0时,舍去丢失位上的值。因此,舍入后的补码为1.0111
对于1.01111100待丢失的后4位为1100,与规则3)相吻合,即当丢失的最高位为1,以下各位不全为0时,执行在尾数最低位加1的修正操作。因此,舍入后的补码为1.0111+1=1.1000。