# 2017q3 Homework1 (ternary) contributed by `<jackyhobingo>` ### reviewed by `Jetudie` + 在 "Balanced Ternary 的設計要解決的問題類型" 中,已從空間使用效率去探討,但未詳述實際應用,缺乏呼應題目的結論:建議對於能解決問題的類型做個舉例。 + 在 "想法 & 思考" 中: + "經由測試結果猜測","猜測"適用於測試之前無規則依循的時候,而此時已有測試及參考,可用"推測"。 + 對測試出來的結果缺乏描述,建議把推測的想法過程表達出來。 + 有 typo, 是四個邊四個"角"而非"腳",是依"照"而非"造"。 + 四個邊角分別為$3^0, 3^1, 3^2$...未說明邊角的順序,表達可再更明確。 --- ## Balanced Ternary 原理 ### Ternary System 相較於一般常見 base2 的進位模式, Ternary System 是一種 base3 的進位系統。Ternary System 計算模式類似 binary system , [影片一](https://www.youtube.com/watch?v=vOyiHMa-mtQ)中舉 $45_{10}\to1200_{3}$ 為例子。 e.g. $\quad45\div3=15\dots0$ $\quad15\div3=5\dots0$ $\quad5\div3=1\dots2$ $\quad2\div3=0\dots1$ $\quad1200_3=1\times3^3+2\times3^2+0\times3^3+0\times3^0=45_{10}$ ### Balanced Ternary Balanecd Ternary 是以 -, 0, + 表示的 Ternary System 可以用 $\sum\limits_{i}^{n}c_i3^i$ 來表示換算成十進位大小 e.g. 基本十進位與 Balanced Ternary 轉換例子 ||$3^2$|$3^1$|$3^0$|| |-|-|-|-|-| |$5$|$+$|$-$|$-$|$+1\times3^2-1\times3^1-1\times3^0=+9-3-1=5$| |$-5$|$-$|$+$|$+$|$-1\times3^2+1\times3^1+1\times3^0=-9+3+1=-5$| |$7$|$+$|$-$|$+$|$+1\times3^2-1\times3^1+1\times3^0=+9-3+1=7$| |$-7$|$-$|$+$|$-$|$-1\times3^2+1\times3^1-1\times3^0=-9+3-1=-7$| |$2$|$0$|$+$|$-$|$0\times3^2+1\times3^1-1\times3^0=0+3-1=2$| ### Balanced Ternary logic table 影片二提到一些 balanced ternary logic table |sum|$-$|$0$|$+$| |-|-|-|-| |$-$|$+$|$-$|$0$| |$0$|$-$|$0$|$+$| |$+$|$0$|$+$|$-$| |carry|$-$|$0$|$+$| |-|-|-|-| |$-$|$-$|$0$|$0$| |$0$|$0$|$0$|$0$| |$+$|$0$|$0$|$+$| |$\times$|$-$|$0$|$+$| |-|-|-|-| |$-$|$+$|$0$|$-$| |$0$|$0$|$0$|$0$| |$+$|$-$|$0$|$+$| |$\div$|$-$|$0$|$+$| |-|-|-|-| |$-$|$+$|$-\infty$|$-$| |$0$|$0$|$NAN$|$0$| |$+$|$-$|$\infty$|$+$| ### ternary multiplexer 在文章[Ternary computing: basics](https://github.com/ssloy/tutorials/wiki/Ternary-computing:-basics)中,設計一種 ternary 的多工器,如圖二,可以藉由 pin sel 來決定可以輸出哪一個 pin 的值,並且可以藉由設定 inN, inO, inP 值的不同來設計出如A+1, A-1, max(A,0), min(A,0) 不同 Function , 進而設計出半加器(圖三、圖四),再組合成全加器(圖五、圖六)。 ![圖二](https://raw.githubusercontent.com/ssloy/tutorials/master/ternary/doc/multiplexer.png) (圖二) ![圖三](https://raw.githubusercontent.com/ssloy/tutorials/master/ternary/doc/A%2BB.png) (圖三 半加器 S) ![圖四](https://raw.githubusercontent.com/ssloy/tutorials/master/ternary/doc/cons(A%2CB).png) (圖四 半加器 C) ![圖五](https://raw.githubusercontent.com/ssloy/tutorials/master/ternary/doc/A%2BB%2BCin.png) (圖五 全加器 Sum) ![圖六](https://i.imgur.com/D8rPViS.png) (圖六 全加器 Carry) ## Balanced Ternary 的設計要解決的問題類型 資料數值 $N_{10}$ 可以在 base 為 b 的計算系統中,使用 $\lfloor{log_bN + 1}\rfloor$ 個digits 來做表示,例如 $50_{10}$ 可以在 base 10 的計算系統中用 $\lfloor{log_{10}50 + 1}\rfloor=2$ The radix economy E(b,N) for any particular number N in a given base b is defined as $E(b,N)=b\lfloor{log_bN+1}\rfloor$ 其中在 $b = e$ 時,radix economy 可以達到 minimal ,但是並沒有辦法做出 $digits = e$ 的處理器,而在 $b \in N$ 的情況下,minimal 在 $N=3$ 。 ## 測試 Balanced Ternary 測試環境:Ubuntu 16.04.3 LTS ``` $ make check echo 27 | ./b3k ├───┐ │ │ └───┘ echo -27 | ./b3k ┌┬──┐ │ │ └───┘ echo 9 | ./b3k ┌───┐ ┤ │ └───┘ echo -9 | ./b3k ┌───┐ ├ │ └───┘ ``` ![參考圖一](https://i.imgur.com/S96fuNs.jpg) ## 想法 & 思考 經由測試結果,及參考圖猜測 - 往內 + 往外 0 則不變,四個邊四個腳分別為$3^0, 3^1, 3^2, 3^3, 3^4, 3^5, 3^6, 3^7$ 能表示的最大值為 $\sum\limits_{i=0}^{7}3^i=3280$ ,最小值為 $\sum\limits_{i=0}^{7}-3^i=-3280$。 此外依造圖上的計算模式可以來表示 balanced ternary 進位退位的運算 ``` $ echo 1 | ./b3k ┌───┐ │ │ └─┬─┘ $ echo 0 | ./b3k ┌───┐ │ │ └───┘ $ echo -1 | ./b3k ┌───┐ │ │ └─┴─┘ $ echo 3281 | ./b3k ├─┴─┤ ┤ ├ ├─┬─┤ $ echo 3280 | ./b3k ├─┴─┤ ┤ ├ ├─┬─┤ $ echo 3279 | ./b3k ├─┴─┤ ┤ ├ ├───┤ $ echo -3279 | ./b3k ┌┬┬┬┐ ├ ┤ └┴─┴┘ $ echo -3280 | ./b3k ┌┬┬┬┐ ├ ┤ └┴┴┴┘ $ echo -3281 | ./b3k ┌┬┬┬┐ ├ ┤ └┴┴┴┘ ``` ### 測試結果 經由程式結果知道,目前能表示的範圍為 $-3280$~$3280$ ## 參考資料 [ 影片一 ](https://www.youtube.com/watch?v=vOyiHMa-mtQ) [ 影片二 ](https://youtu.be/TFTK074nG_M) [Ternary computing: basics](https://github.com/ssloy/tutorials/wiki/Ternary-computing:-basics) [IOTA - isnt it the perfect Cryptocurrency?](https://www.reddit.com/r/CryptoCurrency/comments/6jgbvb/iota_isnt_it_the_perfect_cryptocurrency/dje8os2/) [wikipedia Radix_economy](https://en.wikipedia.org/wiki/Radix_economy)