除以三怎么做?
digital当中,一个数,要除以三,得到整数即可,被除数5个比特的无符号数
有什么好的办法没有?
如果不是这么小的数3,换成大一点的数,也许我就不懂脑筋,直接乘以倒数了
问题是,我想这么小的数,有没有其他办法
这个例子肯定case最简单,定系数乘除法一般是把系数以2的各次幂展开后做移位吧
楼主可以试试这个算法:
wire[4:0] a; //calculate a/3
wire[4:0] b; //tmp data
wire[3:0] c; //c=a/3
b = a[4:1] + a[4:2] - a[4:3] + a[4]
c = b[4:1] + b[0] ;
如果应该是整除的,结果完全正确;如果有余数的,丢弃余数,取整,应该可以达到你的母的。
没有仿真,纸上自己画了一下,举了几个例子都是可行的。楼主有条件的话,自己仿真试试,呵呵。
直接case出来是怎样?
忘了怎么画五输入的卡罗图了。。。
如下推导,对更多位的输入也适用。估计上面给的也是这个原理。
还有种方法,把输入弄成被3整除的(很好弄,被3整除的条件是和为3的倍数),然后解
b=3x <=> b4...b0 = x3...x0 0+x3...x0 <=> x0 = b0, xi+1 = xi ^ bi+1
就是和上面有个哥们贴的图原理类似。但是这种算法在被除数较小的时候误差较大。所以,我用了两种不同的逼近方法求和取平均,最后结果再用求和之后的值最低位判断是否需要修正即可。
原理总结下来就是用2的幂次相加或相减去逼近。比如,楼上贴图那样:1/3=1/4 + 1/16 + 1/64 + 。。。另外一种就是:1/3=1/2 - 1/8 - 1/32 - 。。。
前面已经说了很简单的查找表,而且精度可以做得很高。
最后结果再用求和之后的值最低位判断是否需要修正即可
怎么判断?没看懂...
如果求和结果是奇数,证明两个结果收敛程度不一致,实验证明和最终相差1,所以把这个1加到最终结果或求和结果上即可。若求和结果为偶数,不需要修正。没有算法理论依据,个人观点。。。
除以 相关文章: