Try   HackMD
tags: homework sysprog2017

2017q3 Homework1 (ternary)

contributed by <Jetudie>


題目: C01: Ternary

Balanced Ternary 簡介

What's Ternary ?

也可稱為 three-valued logic。Ternary 用三個真值 (truth value) 表示

true
false
,還有第三個「不確定值」(indeterminate value)。

Ternary 中又有各種不同的數值表示法 (Representation of values),例如:

truth value unsigned balanced
false 0 -
unknown 1 0
true 2 +

from Fast Ternary Addition


Efficiency

ternary 與 binary 相比

Fast Ternary Addition 寫道 "A single digit in number base

b carries
log2b
bits of information. Thus, each ternary digit or trit carries about 1.58 bits, as compared to 3.32 bits per decimal digit.
"

試著算算看 ternary (base 3)

2b=3t
b×log2=t×log3

b/t=log231.58

decimal (base 10) 作法也相仿

b/d=log2103.32

但這又代表著什麼? base 越大就表示起來就越有效率?

Base
e
最「經濟」

  1. 假設有 V 個獨立狀態 (independent state) 的資訊, 可以 base-N 表示成
    V/N
    個位元 (digit)
  2. 可表示的資訊量為
    I=NV/N
  3. 最「經濟」的 base 就是能使
    I
    最大的
    N
  4. 對等號兩邊取自然對數
    ln(I)=(V/N)ln(N)
  5. 等號兩邊對
    N
    微分
    (ln(I))=(V/N2)(1ln(N))
  6. 做第二次對
    N
    微分
    (ln(I))=(V/N3)(2ln(N)3)
  7. N=e
    ,
    ln(I)
    為極值,
    (ln(I))=0
  8. N=e
    ,
    (ln(I))=1/N3
    為負
  9. 因此,
    N=e
    時,
    I
    有最大值(最為「經濟」)
  • radix economy 中定義在給定的 base b 對於數值 N 的 radix economy
    E(b,N)=blogb(N)+1

    E(b,N)=b×(N)

    E(b,N)
    愈小,代表以 base b 表示 N 的效率越高

Balanced Ternary

Balanced ternary 用 "trit" , 也就是 -1 , 0 , 1 表示數值,也常以- , 0 , +T , 0 , 1 代替,其特點在於不須另外加負號就能表示所有整數

與十進位之間的轉換

10Tbal3=1×32+0×31+(1)×30=3dec9dec=1×32+0×31+0×30=T00bal32/3dec=1+1/3=1×30+1×31=T.1bal3

再來看看 3-trit ternary numbers

decimalbal3decimalbal31313+++12012++011+11++10010+0+9009+0080+8+07+7++6+06+05++5+4040++30030+020+20+100100+0000

觀察一下會發現:
如果要知道一個數的負數的相反數(opposite number)只要把 bal3 表示的 +- 反過來即可

from Hackaday 10th Anniversary: Non-Binary Computing


Half Adder and Full Adder

Sum

回顧一下,在 Boolean Logic 中,我們以 xor 來表示兩個 1-bit binary 相加和 (sum);但在 Balanced ternary 的 xor 則不會算出 sum。
但有另外定義一個 sum operator 表示如下:

sum

bcT01T1T0a0T01101T

說明:
0 加任何數,就等於此數本身
1 跟 T 相加為 0
T 加 T 會是 T1 ( carry = T, sum = 1 )
1 加 1 會是 1T ( carry = 1, sum = T )

Consensus

若兩者皆為 T 則為 T ,兩者皆為 1 則為 1 ,其餘皆為 0 。類似於 binary 中的 and 。

consensus

bcT01TT00a00001001

Accept Anything

和 consensus 相對應的 operator 為 accept anything (或 gullibility)。 consensus 除了接收到兩個相同的

true
false
才能確定為其一,其餘皆輸出
unknown
; accept anything 則只會在都是
unknown
或是一個
true
和一個
false
時,才輸出
unknown

accept anything

bcT01TTT0a0T011011

Balanced Half Adder

Balanced Half Adder
半加器的真值表 (truth table)

inputoutputaicici+1siTTT1T00TT1000T0T000001011T001001111T

Balanced Full Adder

若依照 binary 的方法,以兩個 half adder 建構一個 full adder
Balanced Full Adder

會發現 ca 跟 cb 不會出現同時為 T 或同時為 1 的情況

cbcT01TT0ca0T01101

必須進行優化 (optimization),但優化後會變成複雜的形式。若我們只考慮複雜度,並且使用 ripple-carry logic , balanced ternary 並非做一個三進位 ALU 的首選。

from Standard Ternary Logic


Application on Solving Problems

Balanced Ternary 的設計要解決什麼類型的問題,需要詳述實際應用案例 (如 IOTA/Tangle)。提示:從算術表達的精準度和空間使用效率去探討