计组-booth乘法-谈原理和实现
那么如何實現這個變換?
求X×YX \times YX×Y,皆為 n bit
如果Y是無符號數,可作如下展開;如果Y是有符號數,亦可,因為其即使再參與運算,最后會由于取模而表現負數功能(可理解為對負數使用了新的具有可加性的編碼方式,而乘除正是加操作的累計)
Y=2n?1yn?1+2n?2yn?2+2n?3yn?3+...+22y2+21y1+20y0Y=2^{n-1}y_{n-1}+2^{n-2}y_{n-2}+2^{n-3}y_{n-3}+...+2^{2}y_{2}+2^{1}y_{1}+2^{0}y_{0}Y=2n?1yn?1?+2n?2yn?2?+2n?3yn?3?+...+22y2?+21y1?+20y0?
2Y=2nyn?1+2n?1yn?2+2n?2yn?3+...+23y2+22y1+21y02Y=2^{n}y_{n-1}+2^{n-1}y_{n-2}+2^{n-2}y_{n-3}+...+2^{3}y_{2}+2^{2}y_{1}+2^{1}y_{0}2Y=2nyn?1?+2n?1yn?2?+2n?2yn?3?+...+23y2?+22y1?+21y0?
Y=2Y?Y=2n(yn?1?0)+2n?1(yn?2?yn?1)+2n?2(yn?3?yn?2)+...+23(y2?y3)+22(y1?y2)+21(y0?0)+20(0?y0)Y=2Y-Y=2^{n}(y_{n-1}-0)+ 2^{n-1}(y_{n-2}-y_{n-1})+ 2^{n-2}(y_{n-3}-y_{n-2})+...+2^{3}(y_{2}-y_{3})+ 2^{2}(y_{1}-y_{2})+ 2^{1}(y_{0}-0) + 2^{0}(0-y_{0})Y=2Y?Y=2n(yn?1??0)+2n?1(yn?2??yn?1?)+2n?2(yn?3??yn?2?)+...+23(y2??y3?)+22(y1??y2?)+21(y0??0)+20(0?y0?)
原始乘法思路:從低位到高位遍歷處理乘數,1則加被乘數,部分積右移,右移出的位不再參與之后運算;0則不加,直接右移。
booth算法套用這種定位加再右移的框架,但重構了乘數Y。也是對乘數從低位到高位遍歷。從低位后虛補一位0開始,到最高位結束(實際上到次高位即可結束)。每次遍歷。當前位與相鄰高位的差值作為該權下的bit值,為1則加被乘數,為0則不加,為-1則加被乘數的變形補碼(減被乘數,可用乘法分配率拆分乘數理解),之后則右移,更新位權,完成一輪操作。
為什么Y的最低位的后一位要虛補一位0?
由錯位相減式得知要如此;虛補0捕捉最低位的純1子串;補0原式值不變。
遍歷Y的最高位的前一位一定要補0嗎?是否遍歷到乘數Y的次高位即可?
由錯位相減后的Y知,2n(yn?1?0)2^{n}(y_{n-1}-0)2n(yn?1??0)象征bit位中第n+1位的權,處在溢出范圍,故無論乘數該權值為何皆算溢出而無影響。另外,事實上,由于此處0是把Y看做無符號數對最高位的0拓展(正常思維),也可以這樣理解,如果把Y看做有符號數對最高位作符號拓展,則拓展符號位,始終和原符號位yn?1y_{n-1}yn?1?保持一致,故差值一定是0,不影響乘法。
由于移位是為了下一次加法能對準位權,而第n+1次遍歷不加,故最后一次(第n次)遍歷完后不需右移部分積。但是,完成X×YX \times YX×Y,結果為n位高位部分積(每次遍歷時處理的部分積),n位低位部分積(接受高位右移溢出的bit位,同步作右移),為了使低位部分積“完全入座”,接收n個有效bit值(第n次遍歷做完可能的加法后,高位部分積共有n位有效bit值,低位部位積有n-1為有效bit值和最低位的1位空值),還需對整體進行一次算術右移(可以發現一個特點:高位部分積的最高兩位會是相等的)。故:總共做n次遍歷,若干次加法,n次移位。
順便說一句,高位部分積應采取n+1位的雙符號位形式,防止加法溢出。
總結
以上是生活随笔為你收集整理的计组-booth乘法-谈原理和实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国家统计局统计指标
- 下一篇: 服务器被植入挖矿木马的心酸过程