contributed by <louis222220
>
vonchuang
Ternary 三進位是以3為基數的進位數字系統,以0
,1
,2
來表示每一位數,相較於 Binary 二進位以0
,1
來表示的數字系統。用 Ternary 來表示同一個數字,能比 Binary 使用更少的位數。
example:
1010 = (1 * 101) + (0 * 100) = 1010 + 0
10102 = (1 * 23) + (0 * 22) + (1 * 21) + (0 * 20) = 810 + 210
1013 = (1* 32) + (0 * 31) + (1 * 30) = 910 + 110
Decimal | Binary | Ternary |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 02 |
10 | 1010 | 101 |
-1
, 0
, 1
作為值,取代原本 Ternary 的0
, 1
, 2
-
, 0
, +
或 T
, 0
, 1
來表示將三進位數值表示成十進位數值算法為 :
其中
負數的轉換只要將 Balanced Ternary 中的每個trit做Bitwise NOT處理
整數
e.g.
e.g.
分數(小數)
e.g.
e.g.
Kleene 從 Binary 的 true
, false
延伸出 Ternary 的布林代數[3,4,7]
truth value | ternary | balanced ternary |
---|---|---|
false | 0 | - |
unknown | 1 | 0 |
true | 2 | + |
NOT | value |
---|---|
- | + |
0 | 0 |
+ | - |
AND | - | 0 | + |
---|---|---|---|
- | - | - | - |
0 | - | 0 | 0 |
+ | - | 0 | + |
OR | - | 0 | + |
---|---|---|---|
- | - | 0 | + |
0 | 0 | 0 | + |
+ | + | + | + |
SUM | - | 0 | + |
---|---|---|---|
- | + | - | 0 |
0 | - | 0 | + |
+ | 0 | + | - |
Image Not Showing
Possible Reasons
|
CONS | - | 0 | + |
---|---|---|---|
- | - | 0 | 0 |
0 | 0 | 0 | 0 |
+ | 0 | 0 | + |
利用 Balanced Ternary 的邏輯運算
真值表:
- | - | - | + |
- | 0 | 0 | - |
- | + | 0 | 0 |
0 | - | 0 | - |
0 | 0 | 0 | 0 |
0 | + | 0 | + |
+ | - | 0 | 0 |
+ | 0 | 0 | + |
+ | + | + | - |
可分別整理成
- | 0 | + | |
---|---|---|---|
- | - | 0 | 0 |
0 | 0 | 0 | 0 |
+ | 0 | 0 | + |
- | 0 | + | |
---|---|---|---|
- | + | - | 0 |
0 | - | 0 | + |
+ | 0 | + | - |
因此完整的半加法器邏輯圖表示為 | |||
Image Not Showing
Possible Reasons
|
Balanced Ternary 加法器可以透過多個3-to-1 Multiplexer 來實現[5]
如下圖,Selector 針腳的-1
, 0
, 1
決定輸出哪一個輸入的電位
首先藉由 Mux,改變Input腳位的值,做出A+1
及A-1
, MIN(A,0)
, MAX(A,0)
舉例A+1
透過A-1, A, A+1,以B當作Selector腳位,就可以完成SUM(A,B)
MIN(A,0), 0, MAX(A,0)則可以完成CONS(A,B)
好處:
壞處:
老實說目前雖然瀏覽過了這些文章,還是不了解 Balanced Ternary 解決了什麼問題,
利用 Ternary 可以在相同位數內儲存更大的數字,在資料或運算空間需求大的應用上會有用處,例如需要體積小低供耗的 IoT 設備上、金融系統的數字儲存,但應該還有其他因素,形成 Ternary 逐漸受到重視
balanced-ternary 程式的功能是將輸入的十進位數字轉換成 Balanced Ternary,並以圖形呈現
方形的4個面及4個角落,各自表示一個 trit,依順時針從正下方開始是最小的 trit,每個 trit 向外的分支表示+,向內表示-
┌───┐
│ │ = 0
└───┘
┌───┐
┤ │ = 3^2 + 1 = 10
└─┬─┘
┌┬──┐
│ │ = -3^3 = -27
└───┘
├─┴─┤
┤ ├ = 3^7 + 3^6 + 3^5 + 3^4 + 3^3 + 3^2 + 3 + 1 = 3280
├─┬─┤
┌┬┬┬┐
├ ┤ = -3^7 - 3^6 - 3^5 - 3^4 - 3^3 - 3^2 - 3 - 1 = -3280
└┴┴┴┘
此圖形共能表示8 trit,因此能表示的最大數字範圍為:
-3280
~3280
(在此程式中,若輸入超過最大或最小值,則分別以最大或最小值取代)
程式中共有 3 個階段
1
, 0
, -1
,在相對應的位置輸出向內或向外的分支