contributed by <yusihlin
>
tina0405
三位元數值系統由三種符號組成,直觀上會以 0,1,2 來表示三進制,然而 Balanced Ternary 以 -1,0,+1 三種符號代表,由於 -1 的存在不需多餘的符號即可表示負數。
(-1 記為 T)
邏輯概念:如果 Ternary 的3個邏輯概念為 true, unknown, false ,則會有以下關係
Balanced | Logic | Unsigned |
---|---|---|
T | False | 0 |
0 | Unknown | 1 |
1 | True | 2 |
邏輯 NOT, AND, OR, XOR
T | 1 |
0 | 0 |
1 | T |
c | T | 0 | 1 |
---|---|---|---|
T | T | T | T |
0 | T | 0 | 0 |
1 | T | 0 | 1 |
c | T | 0 | 1 |
---|---|---|---|
T | T | 0 | 1 |
0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 |
滿足 DeMorgan's laws ,所以我們只需 max 或 min 並將符號反相即可得另一個。
c | T | 0 | 1 |
---|---|---|---|
T | T | 0 | 1 |
0 | 0 | 0 | 0 |
1 | 1 | 0 | T |
加法器
Half-adder
T | T | 1 | T |
T | 0 | T | 0 |
T | 1 | 0 | 0 |
0 | T | T | 0 |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | T | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | T | 1 |
分別看 |
T | 0 | 1 | |
---|---|---|---|
T | 1 | T | 0 |
0 | T | 0 | 1 |
1 | 0 | 1 | T |
在二進位中我們是以
當我們以 Sum-of-products canonical form 做化簡時 T 會被消除,此時剩下 6 個 minterms ,在布林邏輯中每個 minterms 有兩個輸入,但在這裡我們增加一個輸入常數以指向最後的輸出,所以會變成
T | 0 | 1 | |
---|---|---|---|
T | T | 0 | 0 |
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
同理
雖說 Balanced Ternary 的空間使用度較佳,但也因為多狀態的存在使得電路設計複雜的多。
有了真值表後我們需要構建一個基本構件以實現半加法器,參考 Ternary computing: basics 設計了一個多工器,輸入一個進行基本運算的變數輸出對應的功能 ( unary function ) , 5 個引腳中一個接收三位元的輸入, inN, inO, inP 根據多工器所需功能而設定以產生相應的輸出。
透過上面的真值表設計 4 個不同功能的多工器 A+1, A+1, max(A,0), min(A,0) ,以下拿 max(A,0) 做說明
前面已推導出 max 的真值表,這邊我們輸入 A 做引數,另一個輸入 B 為 0 ,則由真值表截取 B = 0 那行應有的輸出為 (0,0,1),所以如果我們要做出有 max(A,1) 的多工器,則產生的輸出應為 (1,1,1) 當作 inN, inO, inP 的輸入。
接下來就能透過多工器實現
這邊看會比較複雜一點,首先看真值表,不看 A 當 B 的輸入 (-1,0,1) 各會產生三個輸出,當 B 為 -1 時,需傳入的輸入為 (1,-1,0) ,所以在前一層我們須使用功能為 A-1 的多工器傳入第二層的 inN ,依此類推 inO 傳入 (-1,0,1) 也就是 A , inP 傳入 (0,1,-1) 也就是 A+1。
Full-adder
與半加法器相較全加法器有三個輸入
S 的部分有三層,第一層輸入 A ,第二層輸入 B ,第三層輸入
前面 S 的部分可以直接看出,在看
T | 0 | 1 | |
---|---|---|---|
T | T | T | 0 |
0 | T | 0 | 0 |
1 | 0 | 0 | 0 |
當 |
|||
T | 0 | 1 | |
:–––––––––-: | - | - | - |
T | T | 0 | 0 |
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
當 |
|||
T | 0 | 1 | |
:–––––––––-: | - | - | - |
T | 0 | 0 | 0 |
0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 |
當 |
基需 (Radix Economy) 的概念是指在一個固定基數下表示一個數需要的開銷。在表示一個數時同時考慮到基數與位數,例如要表示 0~9 時在基數為 2 下需要 4 位數,在基數為 10 下只需要 1 位數,綜合考量下對基需有明確定義,對於任意數 N,在基數為 R 下表示數字需要
把上式看成連續函數的極值問題
則可以發現當 r = e 時值最小,再來是 3, 2, 4
透過數學證明在整數上三進制是最經濟的進制,可是為何如今的計算機結構仍採用二進制?在 The most efficient radix is not e 中對於 Radix Economy 有其他的看法
要判斷哪個基數比另一個更有效取決於你想表達的數字,這意味著如果你想要表示
如果這樣不就意味著最好的基數總會是想表達的數字 N 本身嗎?事實上的確是如此,但當你要使用它時必須先構建出可以與其搭配的硬體,基數越大難以量化,這表示為了實際目的 R 不能太大。
來比較 radix-2 [2, 4, 8, 16, 32, 64…]和 radix-3 [3, 9, 27, 81, 243, 729…],選擇一個隨機數 N,你可以預期 N 到下一個