不恢复余数法(Non-Restoring Division Algorithm)
不恢复余数法商数的选择使用{-1,1}代替{0,1}。虽然相比于不恢复余数法算法复杂一些,但是硬件实现上更有优势,每产生一个商的比特位只需要一次加或减操作,并且在减法操作后不需要进行余数恢复,使得执行的速度更快。
不恢复余数法其算法如下,参考wiki:
其中,
N为被除数,
D为除数。
R为余数,
Q为商。
商比特位-1一般存储映射为0,由于余数R的范围为:-D <= R < D。比如5/3=?的R和Q的结果:
5 = 2*3-1,Q=2,R=-1
5 = 1*3+2,Q=1,R=2
所以需要通过以下算式校准,将余数R转换为正数:
二、不恢复余数法流程图以及例子
不恢复余数法的流程图如下,以下用A替代为中间寄存器,初始化为被除数N:
不恢复余数法流程图
使用不恢复余数法求被除数N=10,除数D=3的商Q和余数R?
10的二进制为1010
3的二进制为0011
-3的二进制为1101
初始化如下:
n = 4
D = 000110000
-D = 111010000(忽略低4位)
A = 000001010(预留一位进位)
R = 0000
Q = 0000