定点数除法总结

引言:我们在做手工除法的时候,是先判断被除数(或者余数)减去除数是否够减,不够减就商0,然后是将被除数或者余数后面填0,再让除数对齐最后一位,其实这个操作就是将除数右移,而在计算机当中,如果无限制地将除数右移的话会比较消耗存储器,所以每次只将余数左移一位,这样对齐以后也相当于是除数右移了,这里有点疑问就是防止除数右移是应该的,但是余数左移不也会造成相同的过分移位吗?我的理解是因为余数的位数比较确定,而且计算完了之后不用保留,直接刷新存储器里面的值就可以了,而存储器多开一位用来移位,这也是比较固定的,不会过多的造成空间浪费。

恢复余数法就是应用了这样的原理,一句话概括:试减,判断余数符号,正就够减,商1,余数左移一位;符号为负不够减,加除数恢复,商0,余数左移一位再比较。
再来看看为什么会有不恢复余数法的改进,首先恢复余数法最致命的弱点就是在于“恢复”,当余数小于0时就要重新加除数,因为有了这一步导致了在做计算之前无法通过两个运算数就知道要算多少步。接下来看看定量分析:假设初始左移一位减除数的操作结果是2Ri-Y,对于恢复余数发而言,<0,先加回去(Ⅰ),变成2Ri,左移一位(Ⅱ),变成4Ri,减Y(Ⅲ),变成4Ri-Y;
对于不恢复余数而言呢?余数<0,不加回去直接左移一位(Ⅰ)变成4Ri-2Y,加Y(Ⅱ),变成4Ri+Y,得到了相同的结果。大家可以看到我用罗马数字对要做的步骤进行了标记,原本三步完成的,不恢复余数法只需要两步就完成了。
这是恢复余数法的一个例子:
在这里插入图片描述
这是不恢复余数法的一个例子:
在这里插入图片描述
下面是用原码加/减交替除法实现逻辑
在这里插入图片描述
对照着图:右上角可以看到上商位是要移入商里面的;“移位控制”就是控制左移;计数器是控制操作的次数;如果商是1(即Qn是1)则传到下面这个异或门这里来(=1),使除数取反,然后将1传入就变成了反码(减法变成加补码)。这里还有个技巧,就是余数在左移的时候,移出去的那一位正好就是商(可以自行验证),所以我们可以用移出去的数作为商的驱动。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值