homework
sysprog2017
contributed by <Jetudie
>
題目: C01: Ternary
也可稱為 three-valued logic。Ternary 用三個真值 (truth value) 表示
Ternary 中又有各種不同的數值表示法 (Representation of values),例如:
truth value | unsigned | balanced |
---|---|---|
false | 0 | - |
unknown | 1 | 0 |
true | 2 | + |
–from Fast Ternary Addition
Fast Ternary Addition 寫道 "A single digit in number base
試著算算看 ternary (base 3)
decimal (base 10) 作法也相仿
但這又代表著什麼? base 越大就表示起來就越有效率?
Balanced ternary 用 "trit" , 也就是 -1
, 0
, 1
表示數值,也常以-
, 0
, +
或 T
, 0
, 1
代替,其特點在於不須另外加負號就能表示所有整數。
再來看看 3-trit ternary numbers
觀察一下會發現:
如果要知道一個數的負數的相反數(opposite number)只要把 bal3 表示的 +
跟 -
反過來即可
–from Hackaday 10th Anniversary: Non-Binary Computing
回顧一下,在 Boolean Logic 中,我們以 xor 來表示兩個 1-bit binary 相加和 (sum);但在 Balanced ternary 的 xor 則不會算出 sum。
但有另外定義一個 sum operator 表示如下:
說明:
0 加任何數,就等於此數本身
1 跟 T 相加為 0
T 加 T 會是 T1 ( carry = T, sum = 1 )
1 加 1 會是 1T ( carry = 1, sum = T )
若兩者皆為 T 則為 T ,兩者皆為 1 則為 1 ,其餘皆為 0 。類似於 binary 中的 and 。
和 consensus 相對應的 operator 為 accept anything (或 gullibility)。 consensus 除了接收到兩個相同的
半加器的真值表 (truth table)
若依照 binary 的方法,以兩個 half adder 建構一個 full adder
會發現 ca 跟 cb 不會出現同時為 T 或同時為 1 的情況
必須進行優化 (optimization),但優化後會變成複雜的形式。若我們只考慮複雜度,並且使用 ripple-carry logic , balanced ternary 並非做一個三進位 ALU 的首選。
–from Standard Ternary Logic
Balanced Ternary 的設計要解決什麼類型的問題,需要詳述實際應用案例 (如 IOTA/Tangle)。提示:從算術表達的精準度和空間使用效率去探討