定点除法运算:若干余数与除数加减,移位。
例:0.10110 ÷ 0.11111--------->商为:0.10110 余数为:0.10110 x 2-5
实现除法关键:比较余数,除数绝对值大小,以决定上商。恢复余数。
1.原码恢复余数法
算法:比较两数大小可用减法试探。
2 X 余数 -除数 =新余数 (为正,够减,商为1;为负,不够减,商为0,恢复原余数)
实例:X= -0.10110 Y=0.11111 求X/Y,给出商数Q和余数R。
设置寄存器:A:被除数,余数 B:除数 C:商
初值: A=|X|=00.10110;B=|Y|=00.11111;-B=11.00001;C=|Q|=0.00000
分步运算过程:
步骤 判断条件 操作 A=00.10110(看作余数r0) C=0.00000(Cn=0最末位)
符号位SA <----- 01.01100 A= 乘2r0(左移一位)A=01.01100
1 -B + 11.00001
0 r1 = 00.01101 (符号位为0,表示够减,商为1) C=0.00001--->Q12 <------ 00.11010 A=乘2r1(左移一位) A=00.11010
-B +11.00001
1 r2' = 11.11011 (符号位1,表示不够减,商为0) C=0.00010--->Q2
3. +B + 00.11111 (不够减,恢复余数)
恢复余数 r2 = 00.11010
4 <--------- 01.10100 A=乘2r2 (左移一位) A=00.11010
-B +11.00001
0 r3 = 00.10101 (符号位为0,表示够减,商为1) C=0.00101--->Q3
5. <----- 01.01010 A=乘2r3 (左移一位) A=01.01010
-B + 11.00001
0 r4 = 00.01011 (符号位为0,表示够减,商为1) C=0.01011--->Q4
6 <----- 00.10110 A=乘2r4 (左移一位) A=00.10110
-B + 11.00001 1 r5 = 11.10111 (符号位为1,表示不够减,商为0) C=0.10110--->Q5
7 +B 00.11111
恢复余数 r6 = 00.10110
Q=-0.10110
R= 0.10110 x 2-5;(余数同被除数符号)
X/Y = -0.10110 + 0.10110 x 2-5/0.11111
结果X/Y就等于商Q加上余数R再除以除数Y;
运算规则说明:
1.A,B双符号位,X,Y绝对值,|X|小于|Y|。
2.运算结束后,余数乘以2-n,余数与被除数同号。
注解:这个算法是有缺陷的,不够减,就要恢复余数,需要改进。用原码不恢复余数法。
2.原码不恢复余数法(加减交替法)
1算法分析:
看上例:原码恢复余数法 总结:不恢复余数
第二步:2r1 - B = r2' < 0; 第二步:2r1 - B = r2' < 0;
第三步:r2' + B =r2(恢复余数) 第三步:2r2' + B = r3 //直接把r2'左移一位加B
第四步:2r2 - B=r3
2r2 - B=2(r2' + B)- B
=2r2' + B = r3
算法表达式:ri + 1 = 2ri + (1 - 2Qi) Y
ri为正,则Qi为1,第i+1步作2ri - Y;
ri为负,则Qi为0,第i+1步作2ri + Y;
实例:
X=0.10110, Y=-0.11111 求X/Y,给出商数Q和余数R。 设置寄存器:A:被除数,余数 B:除数 C:商
初值: A=|X|=00.10110;B=|Y|=00.11111;-B=11.00001;C=|Q|=0.00000
分步运算过程:
步骤 判断条件 操作 A=00.10110(看作余数r0) C=0.00000(Cn=0最末位)
符号位SA <----- 01.01100 A= 乘2r0(左移一位)A=01.01100
1 -B + 11.00001
0(为正) r1 = 00.01101 (符号位为0,表示够减,商为1) C=0.00001--->Q12 <------ 00.11010 A=乘2r1(左移一位) A=00.11010
-B +11.00001
1 (为负) r2 = 11.11011 (符号位1,表示不够减,商为0) C=0.00010--->Q2
3. <--------- 11.10110 A=乘2r2 (左移一位) A=11.10110
+B + 00.11111
0(为正) r3 = 00.10101 (符号位为0,表示够减,商为1) C=0.00101--->Q3
4. <----- 01.01010 A=乘2r3 (左移一位) A=01.01010
-B + 11.00001
0 (为正) r4 = 00.01011 (符号位为0,表示够减,商为1) C=0.01011--->Q4
5 <----- 00.10110 A=乘2r4 (左移一位) A=00.10110
-B + 11.00001 1(为负) r5 = 11.10111 (符号位为1,表示不够减,商为0) C=0.10110--->Q6 +B 00.11111
恢复余数 r6 = 00.10110
Q=-0.10110
R= 0.10110 x 2-5;(余数同除数符号)
X/Y = -0.10110 + 0.10110 x 2-5/-0.11111
结果X/Y就等于商Q加上余数R再除以除数Y;
运算规则说明:
1.A,B双符号位,X,Y绝对值,|X|<|Y|。
2.根据余数的正负决定商值及下一步操作。
3.求n位商,作n步操作;若第n步余数为负,则第n+1步恢复余数,不移位。
3.补码不恢复余数法(加减交替法)
问题:1.如何判断是否够减法?如何上商?如何确定商的符号?
1.判断够减:(1)同号相除。用绝对值相减(用1表示够减,用0表示不够减)
够减: r与X,Y同号。用绝对值相减(用1表示够减,用0表示不够减)
不够减: r与X,Y异号。