ch数值的机器运算乘法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一般而言,设被乘数x,乘数y都是小于1的n位定点正数:
x=0.x1x2......xn <1 y=0.y1y2......yn <1
其乘积为:
x·y=x(0.y1y2......yn ) n =x(y12-1 +y22-2 +…+ yn2-n ) x yi 2i i 1 = xy12-1+xy22-2 +…+xyn2-n = 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))
0 1 yf 0 1 0
1 1.0 1 1 0
1 1.1 0 1 1 + 1 1.0 0 1 1
0 0 1 yf 0 1
1 0.1 1 1 0
1 1.0 1 1 1
0 0 0 1 yf
最后结果 : [xy]补=1.01110001
说明 z0=0 y4=1, +x
右移,得z1 y3=1, +x
右移,得z2 y2=0, +0
ch数值的机器运算乘 法
4.4.1原码一位乘法
1. 乘法的手工算法
设n位被乘数和乘数用定点小数表示
被乘数 乘数
则乘积
[x]原=xf . xn-1… x1x0 [y]原=yf . yn-1… y1y0
[z]原=(xf⊕yf)+(0. xn-1… x1x0)(0. yn-1… y1y0)
式中,xf为被乘数符号,yf为乘数符号。
乘数 yf 1 0 1 0 1
1 yf 1 0 1 0
0 1 yf 1 0 1
0 0 1 yf 1 0
0 0 0 1 yf 0001
说明
z0=0 y4=1, +x
右移,得z1 y3=1, +x
右移,得z2 y2=0, +0
右移,得z3 y1=1, +x
右y0移=,1得,z-x4=xy最后结果 :
不移位
补码一位乘法比较
开始
n
[ x·y ]补 = [x]补·[y0 yi2i]
开始
i1 n
[x]补 (yi1yi)2i
i0
z = 0, i=[0z]补=0, i=0
[X]补=11.0011,[Y]补=Y=0.1011
部分积
乘数
0 0.0 0 0 0 + 1 1.0 0 1 1
yf 0 1 0 1 1
1 1.0 0 1 1
1 1.1 0 0 1 + 1 1.0 0 1 1
1 yf 01 0 1
1 0.1 1 0 0
1 1.0 1 1 0 + 0 0.0 0 0 0
n
xi 2i
i1
(2) 补码乘法规则(校正法)
设被乘数 [x]补 = x0.x1x2…xn
与原码乘法运算规
乘数 [y]补 = y0.y1y2…yn 均为任意符号,则有补码乘法算式:
则的区别: 1、操作数用补
码表示。
[ x·y ]补 = [x]补·y n
或:[ x·y ]补 = [x]补·[y0 yi2i] i1
4.4.1原码一位乘法
形成递推公式 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))
令zi表示第i次部分积,则根据从内到外的原则有:
z0 = 0, z1 = 2-1(ynx+z0)
优点:
z2 = 2-1(yn-1x+z1)
1、每次只有两个数相加。
┊
2、相加的的位数为n。
右移一位
+ 001101 001011
ynyn+1=01, 右移一位
+ 110011
ynyn+1=10, 加[-x]补
111000
101110
最后一位不移位
[x·y]补=110001011
x·y = -0111 0101=-117
n
n4
x yi2i x(0.y10.0y20.00 y30.00y40) 移位相加
i1
(xy1)21(xy2)22(xy3)23(xy4)24
21(xy121(xy221(xy321(xy40))))
Z1 Z2
相加移位
Z00
Z3 Z4
Z1{xy4Z0}21
Z2{xy3Z1}21 Z3{xy2Z2}21
Z4{xy1Z3}21 Zi {xyniZi1}21
yi或yi与yi+1组合—控制变量,决定每次加法的加数!
4.4.1原码一位乘法
(1)乘积符号的运算规则:同号相乘为正,异号相乘为负。
(2) 手工运算过程:
设x=0.1101,y=0.10110
0. 1 1 0 1 (x) 0. 1 0 1 1 0 (y)
0000 1101 1 101 00 00 + 110 1 0. 1 0 0 0 1 1 1 1 (z)
4.4.1原码一位乘法
开始
n zi + 0
zi = 0, i=0 yn= 1 ?
y zi+ x
zi , y右移一位,i = i+1
n i=n?
y 结束
4.4.1原码一位乘法
例:x=0.1101 , y=0.1011 , 求 x·y 。
部分积 0 0.0 0 0 0 + 0 0.1 1 0 1 0 0.1 1 0 1 0 0.0 1 1 0 + 0 0.1 1 0 1 0 1.0 0 1 1 0 0.1 0 0 1 + 0 0.0 0 0 0 0 0.1 0 0 1 0 0.0 1 0 0 + 0 0.1 1 0 1 0 1.0 0 0 1 0 0.1 0 0 0
部分积
乘数 yn yn+1
说明
000000
101110
yn+1=0
+ 110011 110011
ynyn+1=10,
111001
110111
右移一位
+ 000000 111001
ynyn+1=11
111100
111011
右移一位
+ 000000 111100
ynyn+1=11, 加0
111110
011101
0 0.0 0 1 0
111001
+ 1 1.0 1 0 1
1 1.0 1 1 1
1 1.1 0 1 1
111100
+ 0 0.0 0 0 0
1 1.1 0 1 1
1 1.1 1 0 1
1 1 1 11 0
+ 0 0.1 0 1 1
0 0.1 0 0 0
1 1 1 11 0
[x·y]补=0.10001111
(1) 如果 yn=yn+1 ,则部分积 [zi] 加0,再右移一位; (2) 如果 yn yn+1=01 ,则部分积 [zi] 加[x]补,再右移一位; (3) 如果 yn yn+1=10 ,则部分积 [zi] 加[-x]补, 再右移一位; (4) 数值用补码表示,被乘数和部分积取两位符号位,乘数取一 位符号,符号也参加运算。
0. 1 1 0 1 (x) 0. 1 0 1 1 0 (y) 0. 0 0 0 0 0 0 0 0 0. 0 0 0 0 1 1 0 1 0. 0 0 0 1 1 0 1 0. 0 0 0 0 0 0 + 0. 0 1 1 0 1 0. 1 0 0 0 1 1 1 1 (z)
4.4.1原码一位乘法
说明 yn+1=0 ynyn+1=10, 加[-x]补
右移一位 ynyn+1=11, 加0
右移一位 ynyn+1=01, 加[x]补
右移一位 ynyn+1=00, 加0
右移一位 ynyn+1=10, 加[-x]补 最后一位不移位
例:x=13, y=-9 求x·y=?
[x]补=001101,[y]补=10111, [-x]补=110011
如此重复n + 1步,但最后一步不移位。 包括一位符号位,所得乘积为2n+1位,其中n为尾数位数。
BOOTH法流程图
开始
[z]补=0, i=0
01 yn yn+1=?
00或11
[zi]补+[x]补→[zi]补
[zi]补不变
10 [zi]补+[-x]补→[zi]补
结束
Y i=n+1 ?N
[zi]补, y右移一位,i=i+1
[ x ] 补 [ y 1 y ( 0 ) ( y 2 y 1 ) 2 1 ( y n y n 1 ) 2 ( n 1 ) ( 0 y n ) 2 n ]
[ x ] 补 [ y 1 ( y 0 ) ( y 2 y 1 ) 2 1 ( y n 1 y n ) 2 n ]
行什么操作;然后再由ynyn-1 判断第二步进行什么操作… 。
若 yn yn+1 =01 则 yi+1-yi =1 做加[x]补运算; ynyn+1 =10 则 yi+1-yi= -1 做加[-x]补运算;
ynyn+1 =11 ynyn+1= 00
则 yi+1-yi= 0 [zi]加0,即保持不变
补码BOOTH一位乘的运算规则
zi = 2-1(yn-i+1x+zi-1) 3、容易确定加数。
┊
zn = xy = 2-1(y1x+ zn-1)
4.4.1 原码一位乘
原码一位乘法的规则为: ① 参加运算的操作数取其绝对值,且用两位符
号;
② 令乘数的最低位为判断位,若为“1”,加 被乘数,若为“0”,不加被乘数(加0);
③ 累加后的部分积右移一位; ④ 重复n次②和③; ⑤ 符号位单独处理,同号为正,异号为负。
[zn ]补 21{[zn1]补 (y2 y1)[x]补} [x ·y]补 [zn1]补 [zn ]补 (y1 y0 )[x]补
最后一步不移位
由此可见:
每次都是在前次部分积的基础上,由(yi+1-yi ) 决定对[x]补 的操作,然后再右移一位,得到新的部分积;重复进行。
yn+1,yn的作用: 开始操作时,补充一位yn+1 , 使其初始为0。由yn+1 yn 判断进
右移,得z3 y1=1, +x
右移,得z4=xy
例:x=0.1101 , y=-0.1011 , 求 x·y 。
[X]补=00.1101 [Y]补=11.0101 [-X]补=11.0011
部分积 0 0.0 0 0 0 + 0 0.1 1 0 1 0 0.1 1 0 1 0 0.0 1 1 0 + 0 0.0 0 0 0 0 0.0 1 1 0 0 0.0 0 1 1 + 0 0.1 1 0 1 0 1.0 0 0 0 0 0.1 0 0 0 + 0 0.0 0 0 0 0 0.1 0 0 0 0 0.0 1 0 0 + 1 1.0 0 1 1 1 1.0 1 1 1
(1)真值和补码之间的关系
设[x]补 = x0.x1x2…xn
当x0时, x0=0,
当x0时,
n
[x]补=0.x1x2…xn = x i 2 i = x i1
x0=1, [x]补=1.x1x2…xn = 2 + x
x=1.x1x2…xn-2 = -1+ 0.x1x2…xn= -1+
n
真值与补码的关系: x = -x0 + x i 2 i i1
最后结果 :
乘数 yf 1 0 1 1
1 yf 1 0 1
1 1 yf 1 0
1 1 1 yf 1
1 1 1 1 yf xy=0.10001111
说明 z0=0 y4=1, +x
右移,得z1 y3=1, +x
右移,得z2 y2=0, +0
右移,得z3 y1=1, +x
右移,得z4=xy
尾数
4.4.2 补码一位乘法
2、被乘数的符 号位参与运算。
3、乘数的符号
原码乘法:
x·y=x(y12-1 +y22-2 +…+ yn2-n )
位决定最后是否修 正,修正不移位。
= xy12-1+xy22-2 +…+xyn2-n
= 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))
例:x=-0.1101 , y=0.1011 , 求 x·y 。
n
[x]补 (yi1yi)2i i0
( yn+1是增加的附加位,初值为0 )
递推公式
将上式改为接近于分步运算逻辑实现的递推关系。
[z0 ]补 0 [z1]补 21{[z0 ]补 (yn1 yn )[x]补} [z2]补 21{[z1]补 (yn yn1)[x]补}
[zi ]补 21{[zi1]补 (yni2 yni1)[x]补}
例:[x]补=1.0101,[y]补=1.0011, 求[x·y]补=? [-x]补=0.1011
部分积
乘数 yn yn+1
0 0.0 0 0 0
1. 0 0 1 1 0
+ 0 0.1 0 1 1
0 0.1 0 1 1
0 0.0 1 0 1
110011
+ 0 0.0 0 0 0
0 0.0 1 0 1
[xy]补=1.01110001
Booth算法
[x y]补 [ x ] 补 ( y 0 y 1 2 1 y 2 2 2 y n 2 n ) [ x ] 补 [ y 0 ( y 1 y 1 2 1 ) ( y 2 2 1 y 2 2 2 ) ( y n 2 ( n 1 ) y n 2 n )
x=0.x1x2......xn <1 y=0.y1y2......yn <1
其乘积为:
x·y=x(0.y1y2......yn ) n =x(y12-1 +y22-2 +…+ yn2-n ) x yi 2i i 1 = xy12-1+xy22-2 +…+xyn2-n = 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))
0 1 yf 0 1 0
1 1.0 1 1 0
1 1.1 0 1 1 + 1 1.0 0 1 1
0 0 1 yf 0 1
1 0.1 1 1 0
1 1.0 1 1 1
0 0 0 1 yf
最后结果 : [xy]补=1.01110001
说明 z0=0 y4=1, +x
右移,得z1 y3=1, +x
右移,得z2 y2=0, +0
ch数值的机器运算乘 法
4.4.1原码一位乘法
1. 乘法的手工算法
设n位被乘数和乘数用定点小数表示
被乘数 乘数
则乘积
[x]原=xf . xn-1… x1x0 [y]原=yf . yn-1… y1y0
[z]原=(xf⊕yf)+(0. xn-1… x1x0)(0. yn-1… y1y0)
式中,xf为被乘数符号,yf为乘数符号。
乘数 yf 1 0 1 0 1
1 yf 1 0 1 0
0 1 yf 1 0 1
0 0 1 yf 1 0
0 0 0 1 yf 0001
说明
z0=0 y4=1, +x
右移,得z1 y3=1, +x
右移,得z2 y2=0, +0
右移,得z3 y1=1, +x
右y0移=,1得,z-x4=xy最后结果 :
不移位
补码一位乘法比较
开始
n
[ x·y ]补 = [x]补·[y0 yi2i]
开始
i1 n
[x]补 (yi1yi)2i
i0
z = 0, i=[0z]补=0, i=0
[X]补=11.0011,[Y]补=Y=0.1011
部分积
乘数
0 0.0 0 0 0 + 1 1.0 0 1 1
yf 0 1 0 1 1
1 1.0 0 1 1
1 1.1 0 0 1 + 1 1.0 0 1 1
1 yf 01 0 1
1 0.1 1 0 0
1 1.0 1 1 0 + 0 0.0 0 0 0
n
xi 2i
i1
(2) 补码乘法规则(校正法)
设被乘数 [x]补 = x0.x1x2…xn
与原码乘法运算规
乘数 [y]补 = y0.y1y2…yn 均为任意符号,则有补码乘法算式:
则的区别: 1、操作数用补
码表示。
[ x·y ]补 = [x]补·y n
或:[ x·y ]补 = [x]补·[y0 yi2i] i1
4.4.1原码一位乘法
形成递推公式 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))
令zi表示第i次部分积,则根据从内到外的原则有:
z0 = 0, z1 = 2-1(ynx+z0)
优点:
z2 = 2-1(yn-1x+z1)
1、每次只有两个数相加。
┊
2、相加的的位数为n。
右移一位
+ 001101 001011
ynyn+1=01, 右移一位
+ 110011
ynyn+1=10, 加[-x]补
111000
101110
最后一位不移位
[x·y]补=110001011
x·y = -0111 0101=-117
n
n4
x yi2i x(0.y10.0y20.00 y30.00y40) 移位相加
i1
(xy1)21(xy2)22(xy3)23(xy4)24
21(xy121(xy221(xy321(xy40))))
Z1 Z2
相加移位
Z00
Z3 Z4
Z1{xy4Z0}21
Z2{xy3Z1}21 Z3{xy2Z2}21
Z4{xy1Z3}21 Zi {xyniZi1}21
yi或yi与yi+1组合—控制变量,决定每次加法的加数!
4.4.1原码一位乘法
(1)乘积符号的运算规则:同号相乘为正,异号相乘为负。
(2) 手工运算过程:
设x=0.1101,y=0.10110
0. 1 1 0 1 (x) 0. 1 0 1 1 0 (y)
0000 1101 1 101 00 00 + 110 1 0. 1 0 0 0 1 1 1 1 (z)
4.4.1原码一位乘法
开始
n zi + 0
zi = 0, i=0 yn= 1 ?
y zi+ x
zi , y右移一位,i = i+1
n i=n?
y 结束
4.4.1原码一位乘法
例:x=0.1101 , y=0.1011 , 求 x·y 。
部分积 0 0.0 0 0 0 + 0 0.1 1 0 1 0 0.1 1 0 1 0 0.0 1 1 0 + 0 0.1 1 0 1 0 1.0 0 1 1 0 0.1 0 0 1 + 0 0.0 0 0 0 0 0.1 0 0 1 0 0.0 1 0 0 + 0 0.1 1 0 1 0 1.0 0 0 1 0 0.1 0 0 0
部分积
乘数 yn yn+1
说明
000000
101110
yn+1=0
+ 110011 110011
ynyn+1=10,
111001
110111
右移一位
+ 000000 111001
ynyn+1=11
111100
111011
右移一位
+ 000000 111100
ynyn+1=11, 加0
111110
011101
0 0.0 0 1 0
111001
+ 1 1.0 1 0 1
1 1.0 1 1 1
1 1.1 0 1 1
111100
+ 0 0.0 0 0 0
1 1.1 0 1 1
1 1.1 1 0 1
1 1 1 11 0
+ 0 0.1 0 1 1
0 0.1 0 0 0
1 1 1 11 0
[x·y]补=0.10001111
(1) 如果 yn=yn+1 ,则部分积 [zi] 加0,再右移一位; (2) 如果 yn yn+1=01 ,则部分积 [zi] 加[x]补,再右移一位; (3) 如果 yn yn+1=10 ,则部分积 [zi] 加[-x]补, 再右移一位; (4) 数值用补码表示,被乘数和部分积取两位符号位,乘数取一 位符号,符号也参加运算。
0. 1 1 0 1 (x) 0. 1 0 1 1 0 (y) 0. 0 0 0 0 0 0 0 0 0. 0 0 0 0 1 1 0 1 0. 0 0 0 1 1 0 1 0. 0 0 0 0 0 0 + 0. 0 1 1 0 1 0. 1 0 0 0 1 1 1 1 (z)
4.4.1原码一位乘法
说明 yn+1=0 ynyn+1=10, 加[-x]补
右移一位 ynyn+1=11, 加0
右移一位 ynyn+1=01, 加[x]补
右移一位 ynyn+1=00, 加0
右移一位 ynyn+1=10, 加[-x]补 最后一位不移位
例:x=13, y=-9 求x·y=?
[x]补=001101,[y]补=10111, [-x]补=110011
如此重复n + 1步,但最后一步不移位。 包括一位符号位,所得乘积为2n+1位,其中n为尾数位数。
BOOTH法流程图
开始
[z]补=0, i=0
01 yn yn+1=?
00或11
[zi]补+[x]补→[zi]补
[zi]补不变
10 [zi]补+[-x]补→[zi]补
结束
Y i=n+1 ?N
[zi]补, y右移一位,i=i+1
[ x ] 补 [ y 1 y ( 0 ) ( y 2 y 1 ) 2 1 ( y n y n 1 ) 2 ( n 1 ) ( 0 y n ) 2 n ]
[ x ] 补 [ y 1 ( y 0 ) ( y 2 y 1 ) 2 1 ( y n 1 y n ) 2 n ]
行什么操作;然后再由ynyn-1 判断第二步进行什么操作… 。
若 yn yn+1 =01 则 yi+1-yi =1 做加[x]补运算; ynyn+1 =10 则 yi+1-yi= -1 做加[-x]补运算;
ynyn+1 =11 ynyn+1= 00
则 yi+1-yi= 0 [zi]加0,即保持不变
补码BOOTH一位乘的运算规则
zi = 2-1(yn-i+1x+zi-1) 3、容易确定加数。
┊
zn = xy = 2-1(y1x+ zn-1)
4.4.1 原码一位乘
原码一位乘法的规则为: ① 参加运算的操作数取其绝对值,且用两位符
号;
② 令乘数的最低位为判断位,若为“1”,加 被乘数,若为“0”,不加被乘数(加0);
③ 累加后的部分积右移一位; ④ 重复n次②和③; ⑤ 符号位单独处理,同号为正,异号为负。
[zn ]补 21{[zn1]补 (y2 y1)[x]补} [x ·y]补 [zn1]补 [zn ]补 (y1 y0 )[x]补
最后一步不移位
由此可见:
每次都是在前次部分积的基础上,由(yi+1-yi ) 决定对[x]补 的操作,然后再右移一位,得到新的部分积;重复进行。
yn+1,yn的作用: 开始操作时,补充一位yn+1 , 使其初始为0。由yn+1 yn 判断进
右移,得z3 y1=1, +x
右移,得z4=xy
例:x=0.1101 , y=-0.1011 , 求 x·y 。
[X]补=00.1101 [Y]补=11.0101 [-X]补=11.0011
部分积 0 0.0 0 0 0 + 0 0.1 1 0 1 0 0.1 1 0 1 0 0.0 1 1 0 + 0 0.0 0 0 0 0 0.0 1 1 0 0 0.0 0 1 1 + 0 0.1 1 0 1 0 1.0 0 0 0 0 0.1 0 0 0 + 0 0.0 0 0 0 0 0.1 0 0 0 0 0.0 1 0 0 + 1 1.0 0 1 1 1 1.0 1 1 1
(1)真值和补码之间的关系
设[x]补 = x0.x1x2…xn
当x0时, x0=0,
当x0时,
n
[x]补=0.x1x2…xn = x i 2 i = x i1
x0=1, [x]补=1.x1x2…xn = 2 + x
x=1.x1x2…xn-2 = -1+ 0.x1x2…xn= -1+
n
真值与补码的关系: x = -x0 + x i 2 i i1
最后结果 :
乘数 yf 1 0 1 1
1 yf 1 0 1
1 1 yf 1 0
1 1 1 yf 1
1 1 1 1 yf xy=0.10001111
说明 z0=0 y4=1, +x
右移,得z1 y3=1, +x
右移,得z2 y2=0, +0
右移,得z3 y1=1, +x
右移,得z4=xy
尾数
4.4.2 补码一位乘法
2、被乘数的符 号位参与运算。
3、乘数的符号
原码乘法:
x·y=x(y12-1 +y22-2 +…+ yn2-n )
位决定最后是否修 正,修正不移位。
= xy12-1+xy22-2 +…+xyn2-n
= 2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+2-1(ynx+0))…)))
例:x=-0.1101 , y=0.1011 , 求 x·y 。
n
[x]补 (yi1yi)2i i0
( yn+1是增加的附加位,初值为0 )
递推公式
将上式改为接近于分步运算逻辑实现的递推关系。
[z0 ]补 0 [z1]补 21{[z0 ]补 (yn1 yn )[x]补} [z2]补 21{[z1]补 (yn yn1)[x]补}
[zi ]补 21{[zi1]补 (yni2 yni1)[x]补}
例:[x]补=1.0101,[y]补=1.0011, 求[x·y]补=? [-x]补=0.1011
部分积
乘数 yn yn+1
0 0.0 0 0 0
1. 0 0 1 1 0
+ 0 0.1 0 1 1
0 0.1 0 1 1
0 0.0 1 0 1
110011
+ 0 0.0 0 0 0
0 0.0 1 0 1
[xy]补=1.01110001
Booth算法
[x y]补 [ x ] 补 ( y 0 y 1 2 1 y 2 2 2 y n 2 n ) [ x ] 补 [ y 0 ( y 1 y 1 2 1 ) ( y 2 2 1 y 2 2 2 ) ( y n 2 ( n 1 ) y n 2 n )