文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>2.6.2 浮点乘法、除法运算

2.6.2 浮点乘法、除法运算

时间:2010-09-22  来源:yuxinlen

2.6.2 浮点乘法、除法运算

  1.浮点乘法、除法运算规则
  
设有两个浮点数x和y:

  x=2Ex·Mx
y=2Ey·My

浮点乘法运算的规则是

x×y=2(Ex+Ey)·(Mx×My)    (2.40)

即乘积的尾数是相乘两数的尾数之积,乘积的阶码是相乘两数的阶码之和。当然,这里也有规格化与舍入等步骤。

浮点除法运算的规则是

x÷y=2(Ex-Ey)·(Mx÷My)    (2.41)

商的尾数是相除两数的尾数之商,商的阶码是相除两数的阶码之差。也有规格化和舍入等步骤。

2.浮点乘、除法运算步骤
  
浮点数的乘除运算大体分为四步:

第一步,0 操作数检查;第二步,阶码加/减操作;第三步,尾数乘/除操作;第四步,结果规格化及舍入处理。 

(1) 浮点数的阶码运算

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

移码的定义为:

  [x]移=2n+x   2n>x≥-2n

按此定义,则有:

  [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]补  (mod 2n+1)    (2.42)
  
同理

[x-y]移=[x]移+[-y]补                 (2.43)

上二式表明执行阶码加减时,对加数或减数 y来说,应送移码符号位正常值的反码。如果阶码运算的结果溢出,上述条件则不成立。此时,使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符 号位恒用 0 参加加减运算,则溢出条件是阶码的最高符号位为1。此时,当两位符号位为 10时,表明上溢,为11时,表明下溢。当最高符号位为0时,表明没有溢出;两位符号位为01时,结果为正;为00时,结果为负。

[例26] x=+011,y=+110,求[x+y]移 和 [x-y]移,并判断是否溢出。

[解:]

[x]移=01 011, [y]补=00 110, [-y]补=11 010  

[x+y]移=[x]移+[y]补=10 001, 结果上溢。  

[x-y]移=[x]移+[-y]补=00 101, 结果正确,为-3。

(2) 尾数处理

浮点加减法对结果的规格化及舍入处理也适用于浮点乘除法。

第一种简单方法是,无条件地丢掉正常尾数最低位之后的全部数值。这种办法被称为截断处理,好处是处理简单,缺点是影响结果的精度。

第二种简单办法是,运算过程中保留右移中移出的若干高位的值,最后再按某种规则用这些位上的值修正尾数。这种处理方法被称为舍入处理。

当尾数用原码表示时,舍入规则比较简单。最简便的方法,是只要尾数的最低位为1,或移出的几位中有为1的数值位,就是最低位的值为1。另一种是0舍1入 法,即当丢失的最高位的值为1时,把这个1加到最低数值位上进行修正,否则舍去丢失的的各位的值。这样处理时,舍入效果对正数负数相同,入将使数的绝对值 变大,舍则使数的绝对值变小。

当尾数是用补码表示时,所用的舍入规则,应该与用原码表示时产生相同的处理效果。

具体规则是:

当丢失的各位均为0时,不必舍入操作;

当丢失的最高位为0时,以下各位不全为0时,或者丢失的最高位为1,以下各位均为0时,则舍去丢失位上的值;

当丢失的最高位为1,以下各位不全为0时,则执行在尾数最低位入1的修正操作。

[例27] 设[x1]补=11.01100000,[x2]补=11.01100001,[x3]补=11.01101000,[x4]补=11.01111001,求执行只保留小数点后4位有效数字的舍入操作值。

[解:]

执行舍入操作后,其结果值分别为

[x1]补=11.0110 (不舍不入)

[x2]补=11.0110 (舍)

[x3]补=11.0110 (舍)

[x4]补=11.1000 (入)

[例28] 设有浮点数x=2-5×0.0110011,y=23×(-0.1110010),阶码用4位移码表示,尾数(含符号位)用8位补码表示。求[x×y]浮。要求用补码完成尾数乘法运算,运算结果尾数保留高8位(含符号位),并用尾数低位字长值处理舍入操作。

[解:]

移码采用双符号位,尾数补码采用单符号位,则有  

 [Mx]补=0.0110011, [My]补=1.0001110,  

[Ey]移=01 011, [Ey]补=00 011, [Ex]移=00 011,  

[x]浮=00 011, 0.0110011, [y]浮=01 011, 1.0001110

(1) 求阶码和 

[Ex+Ey]移=[Ex]移+[Ey]补=00 011+00 011=00 110,值为移码形式-2。

(2) 尾数乘法运算可采用补码阵列乘法器实现,即有

[Mx]补×[My]补=[0.0110011]补×[1.0001110]补
                 =[1.1010010,1001010]补

(3) 规格化处理  

乘积的尾数符号位与最高数值位符号相同,不是规格化的数,需要左规,阶码变为00 101(-3),尾数变为 1.0100101,0010100。

(4) 舍入处理

  尾数为负数,取尾数高位字长,按舍入规则,舍去低位字长,故尾数为1.0100101 。

最终相乘结果为:

  [x×y]浮=00 101,1.0100101

其真值为:

  x×y=2-3×(-0.1011011)

相关阅读 更多 +
排行榜 更多 +
猎枪行动

猎枪行动

飞行射击 下载
导弹袭击

导弹袭击

飞行射击 下载
猫猫突围封锁要塞新手打法

猫猫突围封锁要塞新手打法

飞行射击 下载