一个16位数除3有没有简单的实现办法
时间:10-02
整理:3721RD
点击:
一个16位数除3有没有简单的实现办法,使其在很短的时间出结果?
因为除数是固定的比较小的数3,所以有没有求解的捷径?
可以用查表的方式
移位加法来近似计算即可。
计算复杂度根精度有关,当需要精度较高的结果时,连加的个数可能偏多,此时可以仿照booth乘法器的处理形式,采用4-2压缩器来减小连加的个数。
只要商就行,不需要余数,所以精度应该不算高
a/3=0.333333*a,采用一个乘法器就可以了
16比特数a除以3,先将a乘以43691,然后再逻辑右移17比特,可以试试
16比特数a除以3,先将a乘以43691,然后再逻辑右移17比特,可以试试
不知道你除3想要一个什么样的结果,如果要一个近似数,则采用级数的方法(简单说就是二分法)。如果要得到商和余数,可以考虑从从左边往右;用FOR循环,前面补两个0,每次得到的余数拿过来和下一个bit组合成三位数,一直到16BIT除完。
但是如果用循环移位的话延迟就大了,16个周期
如果频率不高的话,组合逻辑完成,否则中间分成几段进行运算。
小编采用我的方法,没错的
能说说原理吗?如果除的不是3,如何解决?谢谢
有本书叫“hacker's delight”
也有中译本,方法是上面学来的 楼上可以找来看看
查表最快,一个周期搞定 ,就65536种情况。
查表至少需要16kbyte的存储空间,对嵌入式系统来说开销太大
