【摘要】:如果要求我们对一个除法的结果取整,通常的解决方法是看如果分数部分是0.5还是更大。然而,整数除法的硬件将产生整数序列和一个余数,不是一个小数值。所以,如果这个余数比被2除的除数大,取整的一个方法将是在这个商值上加1。一个更为有效的方法是辨别在进行相除之前,如果加除数的1/2到被除数中,结果将是被取整。即使是在机器中有硬件整数除法器,通过执行2的幂次的移位操作也是速度更快的。
如果要求我们对一个除法的结果取整,通常的解决方法是看如果分数部分是0.5还是更大。如果是这样的话,加1到这个结果中,否则只截取整数值。然而,整数除法的硬件将产生整数序列和一个余数,不是一个小数值。所以,如果这个余数比被2除的除数大,取整的一个方法将是在这个商值上加1。然而,这需要下面的额外的步骤。
一个更为有效的方法是辨别在进行相除之前,如果加除数的1/2到被除数中,结果将是被取整。这需要下面的额外步骤:
(1)得到除数被2除的值(用任一个余数取整);
(2)在相除之前加到被除数上。(www.xing528.com)
这样截短的结果实际上就是取整,对于一个8比特无符号整数处理过程如下所示。
当可编程计算机硬件没有一个硬件整数除法器的时候(例如TMS320C6x系列),为了避免被任意一个数而不是2的幂次数相除,在算法执行中会不遗余力地采取多种措施。这将允许除法运算通过使用位运算移位来完成,因为每次右移操作等价于被2除,对于一个8比特的无符号数的除法如下表所示。相反地,一个左移操作等价于乘2。即使是在机器中有硬件整数除法器,通过执行2的幂次的移位操作也是速度更快的。在上面的例子中,被2除最好是通过右移1比特来实现。
注意,在最后的结果中,发生溢出时的结果是不正确的。当使用整型表示时,高亮的符号位限制了有效值的动态范围。浮点表示有助于缓和这个问题,尽管它们也受相同的问题支配。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。