⼿算计算过程
原码是浮点数尾数的表⽰形式,需要计算机能实现顶点原码⼩数的乘法运算。
原码乘法分两步:(1)有两个数的符号位异或得到乘积符号位;(2)计算乘积的数值位。乘积的数值部分为两个乘数的数值部分之积。
可以将两个定点⼩数的数值部分之积看成是两个⽆符号数的乘⼩数点不⽤管,计算机内部没有⼩数点的表⽰,只是约定了它的位置。因此我们可以将两个定点⼩数的数值部分之积看成是两个⽆符号数的乘积。
计算机进⾏⽆符号数的乘法计算时,采⽤了类似⼿算的⽅法。但为了提⾼效率,做了相应改进:
部分积。
(1)每当将乘数Y的⼀位乘以被乘数得到后,就将它与前⾯的结果累加得到,我们把它叫做部分积。
这个改进没有等到全部计算完毕再进⾏移位和加和的操作,减少了保存每次的的开销。
(2)每次求得后,不是将它左移与前次部分积相加,⽽是将部分积右移⼀位
右移⼀位,再以相应的⾼位与其相加。
(上⽂提到过,计算机中原码多⽤于表⽰浮点数的尾数部分,因此原码乘法中,⼩数乘法占了⼤多数。
计算机中的左移操作,对应于实际计算中的操作,右移操作对应于的操作,后者于⼩数计算更有利,⽽整数多⽤补码来进⾏计算,后⽂将讲到专门的布斯乘法来进⾏更便利的整数乘法)
只进⾏右移运算。
加法和右移运算,⽽对乘数中为的位只进⾏右移运算
(3)对乘数中为的位进⾏加法和右移运算
将的⾼n位进⾏相加
的⾼n位进⾏相加,低这样做的好处在于,如果按照⼿算操作,原本需要⾮常多位的储存与计算加法器,现在经过简化,只需要将
n位的加法器就可以实现两个n位的⽆符号数的相乘,需要的存储容量也⼤⼤降低。
位都不会改变,因此只需要n位的加法器就可以实现两个n位的⽆符号数的相乘
上述思想的数学推导如下:
其中有。booth算法乘法例题讲解
上述推导过程具有明显的递推公式,我们可以观察得出,其递推公式为:
我们可以设。
其中,部分积与乘数Y是放在⼀个64位寄存器中的,Y的最低位判断相乘过后便没⽤了,右移⼀位舍弃它,P的右移也能留出空间,节省存储。乘数寄存器Y⼀开始放置的是乘数,结束时放置的是64位乘积的低32位‘乘数寄存器P⼀开始放置的是,结束时放置的是64位乘积的⾼32
每次循环都要对进位位C、乘积寄存器P和乘数寄存器Y实现同步“右移”。
当乘数或被乘数中⾄少有⼀个全为0时,结果直接得0,不在进⾏乘法运算。
性,于是我们需要⼀个新的算法来计算不乏的乘法。
A.D.Booth提出了⼀种补码相乘算法,可以将符号位与数值位合在⼀起参与运算。于是称为“布斯算法”。
类似于原码,我们先进⾏利⽤补码形式的运算数学推导,观察得出其迭代或递推式:
假设,
根据补码的定义,我们可以得到的真值表达式为:
这⾥对y的第⼀项做⼀下解释。
我们都知道最开始的不添加任何符号的⼆进制数,也就是原码表⽰的⽆符号数,本来是只能表⽰~(n是⽤来表⽰⼆进制最⼤位数)的数,我们为了计算机的运算⽅便,才对⼆进制的表⽰形式做出种种规定。
⽽补码表⽰法,将正负数置于(n依然是最⼤位数)的系统之下,巧妙地利⽤了模的特性是计算机的运算变得更加简单快捷。
在模运算系统中,若、、满⾜关系:,则记为:,即A与B模M后余数相同,称为A与B同余。在⼀个模系统中,⼀个数与它除以模后得到的余数是等价的。
利⽤这个等价关系,计算机的前辈们把负数与其同余的正数等价起来,也就是说负数在模的系统下,跟这个数加得到的正数是等价的。这样补码就诞⽣了。
所以在补码中,如果这个数是⼀个负数,我们计算出它的⼗进制真值可以先取反加⼀再取负数,也可以直接把它当做原码表⽰法,计算出其正数真值,然后再减去,得到其表⽰为补码时所代表的的真值。
所以我们再回到y的真值表达式中来:
后⾯得到了它原码表⽰法时的⼗进制正数真值,当最⾼位为1时,它是负数,减去;为0时,它是正数,正数的原码表⽰法跟补码表⽰法是⼀样的,此时这⼀项为0,不影响结果正确。
我们在这个式⼦基础上进⾏归纳化简:
(设)
与⽆符号数乘法算法类似,我们可以得出:
与⽆符号数算法⼀样,我们可以不⽤考虑⼩数点的位置,只要最终的乘积约定好⼩数点位置就可以了。因此上述式⼦可以通过乘以来变换成下列形式:
展开观察,我们可以得到递推公式为:
由此公式⼜可以得到:
对于⼩数点的问题,⽐较刚归纳完的式⼦,我们可以知道,但是我们提过计算机中⼩数点的位置是可以随意约定的,因此我们在计算完毕之后将⼩数点的位置约定在乘积的最右边。
从上⾯的递推式,我们可以知道,布斯算法的部分积是由乘数中的连续两位确定的,因此我们可以得到它的规则为:
(1)若,;
(2)若,;
(3)若,。
代表右移
那么根据以上的分析,我们可以得出补码乘法运算规则如下:
(1)乘法最低位增加⼀位辅助位,即;
(2)根据的值,决定部分积还是,或者不加减;
(3)每次加减后算术右移⼀位,得到部分积;
(4)重复第(2)(3)步 n 次,得到结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论