前置知识
在了解恢复余数法,我们需要回顾一下我们除法心算的过程,当我们想要给商的某一位位置填上某个数字,可能是x,也可能是x+1,一般是因为如果填x+1的话,这个商乘上我们的除数反而会比被除数大,于是需要去填x。
于是,恢复余数法就像是知错能改的方法,他知道用x+1不合适,他把x+1恢复成x。
而不恢复余数法就像是一种将错就错的方法,他算完后知道用x+1不合适,但他还是继续用下去。
浅谈原理
约定将商的第k位设为
Q
k
Q_k
Qk,第i轮余数设为
R
i
R_i
Ri,除数设为X,被除数设为Y。
于是拿那两轮情况出来考虑,
恢复余数法
如果够减,那么
R
i
+
2
=
(
R
i
−
X
)
<
<
1
−
X
R_{i+2} = (R_i-X)<<1-X
Ri+2=(Ri−X)<<1−X
如果不够减,那么
R
i
+
2
=
(
R
i
−
X
+
X
)
<
<
1
−
X
R_{i+2} = (R_i-X+X)<<1-X
Ri+2=(Ri−X+X)<<1−X
不恢复余数法
如果够减,那么
R
i
+
2
=
(
R
i
−
X
)
<
<
1
−
X
R_{i+2} = (R_i-X)<<1-X
Ri+2=(Ri−X)<<1−X
如果不够减,那么
R
i
+
2
=
(
R
i
−
X
+
X
)
<
<
1
−
X
=
(
R
i
−
X
)
<
<
1
+
X
R_{i+2} = (R_i-X+X)<<1-X= (R_i-X)<<1+X
Ri+2=(Ri−X+X)<<1−X=(Ri−X)<<1+X
所以不恢复余数法相对于恢复余数法在不够减的情况下省去了一次运算。
注意不恢复余数法,一轮处理两次,将第一次错误的减法的恢复操作合并到第二次减法,也就是说如果要处理的数字的位数为奇数,最后一位又发生了不够减的情况,那么这个时候将会破例采取恢复操作。
备注,原码的不恢复余数法也叫原码的加减交替法。
注意点
补码的加减交替法,同号商上1,异号商上0。