首页 > 其他 > 详细

定点数乘法

时间:2021-04-05 17:21:56      阅读:30      评论:0      收藏:0      [点我收藏+]

乘法相当于变为移位运算和求和运算,相当于将乘数B从低位到高位乘下来,部分积从零开始累加,并且右移一位(相当于乘了个1/2)

(注意,符号位相当于进行了异或运算,相同为0,相异为1,不参与后面的数值部分计算)

原码乘法:

技术分享图片

 

补码乘法:Booth算法(被乘数,乘数符号任意) 一般用于带符号数乘法

这个的原理证明还是慢慢看吧,先大概把怎么用搞懂

计算规则:

技术分享图片

 

A补 指累加的部分积

例:

 

 x = -0.1101  y = -0.1011

A = 00.0000 ,B = [x]补 = 11.0011  -B = -[x]补 = 00.1101    C = [Y]补 = 1.0101

在第一步之前,需要在C的最低位补上一个0(为什么),使得C = 101010

第一步

 判断C中最低两位的数 10,所以减去B,等于加上-B

此时A = 000000+001101=00 1101       C = 10 1010 (先不动,后面统一右移)   右移操作:

由于是双符号位表示,则需要将A中第二符号位右移,使其先暂时保持空缺,同时A中最低位右移到C最高位,如图所示

技术分享图片

 

对A而言,当前是补码正数,所以在空缺的位置补0

第二步:判断C中最低两位的数,01,所以+B

A = 000110 + 110011 = 111001   C = 110101

整体右移一位: A此时是补码负数,所以在空缺位置补1

 

 技术分享图片

 

第三步:

 

  判断C中最低两位的数 10,所以减去B,等于加上-B

 A = 111100 = 001101 = 1 001001    C = 111010

这个地方1 是超出范围的,1不计,再整体右移

这里A为补码正数,所以在空缺位置补0

 技术分享图片

 

第四步 

 判断C中最低两位的数,01,所以+B 

A= 000100 + 110011 = 110111  C= 111101

整体右移,然后A补1 

 技术分享图片

 

共四次循环,

开始校正: 此时C最低两位为10,因此要-B

A = 111011 + 001101 = 1 001000(最高位舍去)     C = 111110 ,这个时候不需要移位了

考虑到乘数C的底两位只是用来参考位判断,所以只取C的前四位

最后得 z = 001000 1111 由于最高得两位是符号判断位,所以最终

z = + 0.1000 1111

定点数乘法

原文:https://www.cnblogs.com/SValley/p/14618577.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!