1、除法的本質
????????除法的本質是減法,也就是一個大的數減去一個小的數,比如:10/2,也就是10-2-2-2-2-2=0,所以商5余0,10/3,也就是10-3-3-3=1,所以商3余1,這也是很常見的方法,但如果引入負數,情況又會有些變化,分成4種總結為2種:
10/2=10-(2*1)-2-2-2-2=0? 商5余0,
-10/-2=-10-(-2*1)+2+2+2+2=0?商5余0,
10/-2=10-(-2*-1)-2-2-2-2=0?商-5余0,
-10/2=-10-(2*-1)+2+2+2+2=0?商-5余0,
????????通過上面示例,可看出雙正雙負,得的商是正數,而一正一負,得的商是負數,仔細看10/-2及-10/2這兩個例子,拿10/-2舉例,10-(-2)=12越來越大了,與實際情況不符,所以要乘于-1即,10-(-2*-1)=8與實際情況相符,所以商是負數正確;對于平衡三進制同樣適用,被除數與除數相減后變余數,被除數(余數)與除數同種符號,上1反之上T,這樣才能保證兩者越來越趨向于0,所以最簡單粗暴方法就是,用減法來做加法 ,詳情請看:二進制如何做除法?及?平衡三進制四則運算?文章。
2、平衡三進制除法器:減法器版
? ? ? ? 平衡三進制的好處就是對稱,但也特別的有特點,比如它的減法器,在平衡三進制加法器中它是正向進位的,而減法器它可以負向進位,你沒聽錯是負向進位,當初的我算也不會算,后面得益于我的初中知識,有公式:被減數 +?取反的要減數=? 被減數 - 要減數,即12-6=6相當于12+(-6)=6,負負得正了,這確很方便了,只要被減數加上取反的要減數,就可以得到結果,但其實它的減法表也是可以用,不過太反直覺了,并不建議使用,減法器版除法器,原理如下所示:
? ? ? ? 可得代碼:不想寫了
3、平衡三進制除法器:試商版
? ? ? ? 說實話,其實這才是最常用的,就像10/2=5,沒人會10-2-2-2-2-2=0這樣算,但對于平衡三進制來說,不理解它的話,這樣是最簡單的,用十進制的試商方法,剛開始算了很多次,都無從下手,不是結果不對,就是不知道商是+0-,直到我看到了這文章托馬斯·福勒的三元計算機,才知道這還真能算,我差點就覺得它壓根算了,但它實現是太規整,如下圖所示:
????????它算的是280/5=35,過程很清楚,即216+72+0+8=280,中間結果余數是允許有負的,就像上面的-8,這里有三個點要注意,首先是減法太麻煩了,當商上+時,應是寫成(+0++0+)-(+0-000),現在變成了(+0++0+)+(-0+000),這就是相減變成加上它的相反數,所以商為+時,出相反數,商為-時,直接照樣寫;然后就是對位要齊,若對不齊就會導致算錯,這里+0-后面,跟了多少個0,每多1個0,那就要多乘3,可出列表格:
平衡三進制數 | 十進制? |
+0-000 | 216(8*3*3*3) |
+0-00 | 72(8*3*3) |
+0- | 8 |
還有就就是商要怎么上,就是要余數趨于0,規則如下所示:
被除數(余數)與除數互為相反數,商就上-?;
中間結果移動了兩位數字,上0先對齊;
當被除數(余數)與除數的符號,都為正數或負數,商就上+;
感覺學會了,下面來用一下吧,比如10/2和4/2的平衡三進制除法:
沒想到吧,10/2可以取18這個數,比10都大,但是結果就是正確的,其它都不行,這是怎么想到的,也就是+-后面加0,即+-為2、+-0為6、+-00為18,商是+--,所以結果是18-6-2=10,也就是10-18+6+2=0;同樣的,4/2相當于4-6+2=0,商就是+-,6不6,太難算了。