# 2017q3 Homework1 (Ternary) ###### contributed by <`nienzu`> ### Reviewed by`vonchuang` * 文中提及欲研究 Balanced Ternary 加法器,可參考 [Fast Ternary Addition](http://homepage.divms.uiowa.edu/~jones/ternary/arith.shtml),有很詳盡的介紹 * "$1\ tryte = 3\cdot trits",此處 Latex 沒有寫好,閱讀上較不便 * 在Balanced Ternary 優勢分析,對於 Radix 和硬體製作方面可在更詳盡的描述 * "為何沒被量產? 不知名的原因,多半是政策導致",用語可在精確客觀些 * 參考資料散於文中各處,或許可整理在文末 * 可增加實作及應用案例的程式碼 ## Balanced Ternary 數值系統簡介 Balanced Ternary 是 base-3 的數值系統,以 `-1`, `0`, `1` 來表示數值,本篇的 `-1` , `0`, `1` 分別以 `T`, `0`, `1` 來表示。而與 balanced Ternary 相對的是 Ternary 數值系統以 `0`, `1`, `2` 來表示數值。 >> 不要打錯字!正確書寫方式為 "balanced ternary",之前少了 "d" 字母 >> [name="jserv"][color=red] ### Decimal、Binary、Ternary、Balanced Ternary 之間的轉換 |Decimal|Binary|Ternary|Balanced Ternary| |:--:|:--:|:--:|:--:| |331|101001011|110021|1101T1| \begin{split}331_{dec}\ &=\ 2^8+2^6+2^3+2^1+2^0 \\&=\ 3^5+3^4+2\cdot3^1+3^0 \\&=\ 3^5+3^4+3^2-1\cdot3^1+3^0 \end{split} * Ternary 轉換為 Balanced Ternary * 2 當作 $"1T"$ $1201_{3}\ =\ 1001{bal3}+1T00_{bal3}=1TT01$ ### Balanced Ternary 的四則運算 * ADD |+|1|0|T| |:-:|:-:|:-:|:--:| |1|1T|1|0| |0|1|0|T| |T|0|T|T1| > $1_{bal3}+1_{bal3}=1T=3^1-3^0=2_{dec}$ > $T_{bal3}+T_{bal3}=T1=-3^1+3^0=-2_{dec}$ > $T1_{bal3}$ <--> $1T_{bal3}$ 乘上 T 就互相反轉 > 結論:相對 Binary 用補數系統來搞定負數, bal3 的運算較少 > 不過應該要研究`加法器` 來實際看看省了多少資源比較科學 * SUB |-|1|0|T| |:-:|:-:|:-:|:--:| |1|0|T|T1| |0|1|0|T| |T|1T|1|0| * Multiplication |x|1|0|T| |:-:|:-:|:-:|:--:| |1|1|0|T| |0|0|0|0| |T|T|0|1| * Division |÷|1|0|T| |:-:|:-:|:-:|:--:| |1|1|0|T| |0|NAN|NAN|NAN| |T|T|0|1| ### Balanced Ternary 邏輯運算 & 邏輯閘 三元邏輯對 Balanced Ternary 來說一樣以 `-1`,`0`,`1` 來表示,以下會詳解兩種在 Imply 的邏輯法則 #### Kleene logics * NEG |NEG|~A| |--|--| |T|1| |0|0| |1|T| * A ^ B ,Min(A,B) |A^B||B||| |---|--|---|---|---| |||T|0|1| ||T|T|T|T| |A|0|T|0|0| ||1|T|0|1| * A v B ,Max(A,B) |AvB|||B|| |---|--|---|---|---| |||T|0|1| ||T|T|0|1| |A|0|0|0|1| ||1|1|1|1| ### Binary to ternary conversion and vice versa * 在裡主要會探討的是為何在這篇[文章](https://forum.iota.org/t/binary-to-trinary-conversion-and-vice-versa/201)會提到 bytes 轉換成 trytes 轉換會有 lost 的問題,滿好奇其中的原因 :::info 名詞 * TRIT (Trinary Digit) * TRYTES : The way we represent trytes is in uppercase latin letters and the number 9 ([9A-Z]) * $1\ tryte = 3\cdot trits ( 和 setun 設計的時候不同 ) > reference : https://learn.iota.org/faq/trytes-and-trits 工具 * [IOTA Converters](https://laurencetennant.com/iota-tools/) * ASCII Message to Trytes * Base10 to Ternary * Bits To Trits To Bytes To Trytes Calculator * Currency Converter ::: ## Balanced Ternary 優勢分析 > TODO: 論述方式請參考 [Ternary Number Systems](http://homepage.divms.uiowa.edu/~jones/ternary/numbers.shtml) 的手法 > [name="jserv"][color=red] * 從何著手? * 數值系統的 Radix * 硬體製作上 ### Balcenced Ternary 基本運算 ## Ternary 數值系統文獻回顧 ### Ternary Computer 相關歷史 * [Ternary Computer](https://en.wikipedia.org/wiki/Ternary_computer) * 雖然現在的電腦多數都是二進位的電腦,不過在 1958 年就有一台 Setun 被蘇聯做出來,並指出相較於二進位電腦來說:電力消耗較低和較低的製造成本,而雖然現在多數電腦都是二進位數值系統,不過在這篇 Wikipedia 裡的 [參考資料](http://iopscience.iop.org/article/10.1238/Physica.Topical.118a00098/meta;jsessionid=5AA66686695703462A95E2886B802E63.c4.iopscience.cld.iop.org)裡就指出 Ternary logic 有機會和光子電腦 (Optical computer) 結合成為未來電腦的趨勢。 > 請詳述和 optical computer 的結合機會,以及具體可解決什麼類型的問題 > [name="jserv"][color=red] ### Setun : A Ternary Computer Setun 最早開始被設計起想滿足大學、實驗室、工業的需求:可靠、便宜、有效率、能解決廣泛的問題,研究起始於 1956 年,由 9 位科學家費時一年多將 Setun 的 Ternary code 架構設計出來,然後花費一年的時間將機械做出來,從 1956-1958 只花了兩年的時間,並且實際生產了 50台左右直到 1965 停止生產,據文章說明,當初受到將資金集中發展某個領域的政策影響所以 Setun 的研究與生產並沒有繼續下去,而最初一台的造價約為 27500 盧布,而 1965 年生產的二進位電腦造價則是這台的 2.5 倍。 #### Setun 小資料 * "Setun" is a sequential computer containing the fast multiplier, thanks to the speed of operation as in parallel devices is achieved. The small (3 pages of 54 words) ferrite RAM that has page exchange with the main magnetic drum memory works as a cash. * Setun has 24 instruction. * 為何節省電力? * Due to the low reliability of the computer elements on vacuum tubes and inaccessibility of transistors the fast elements on miniature ferrite cores and semiconductor diodes were designed. These elements work as a controlled current transformer and were an effective base for implementation of the threshold logic and its ternary version in particular. Ternary threshold logic elements as compared with the binary ones provide more speed and reliability, require less equipment and power. These were reasons to design a ternary computer. * In comparison with the binary elements of memory and elementary operations, the ternary design made the architecture of computer more "natural and simple". > More natural * 為何沒被量產? * 不知名的原因,多半是政策導致 #### 製造上的年代對比 * 美國 IBM * 蘇聯 |蘇聯|時間軸|其他國家| |:--:|:---:|:---:| |||| > 這裡打出來的參考資料在這篇 [Reddit 的文章](https://www.reddit.com/r/programming/comments/5e3f4n/the_balanced_ternary_machines_of_soviet_russia/)中的留言有人提到 `Setun is a victim of complicated politics...` ,然後在這篇俄文的文章提到當時發展 Setun 的歷史背景(感謝 google 翻譯),另外則是俄羅斯的電腦博物館的文獻,兩者對於理解當時的情況很有幫助 [Development of ternary computers at Moscow State University](http://www.computer-museum.ru/english/setun.htm),最後[Ternary Computers: The Setun and the Setun 70](https://hal.inria.fr/hal-01568401/document)這篇整理的很完整 >[name="nienzu"] > 為什麼相較 base-2 的電腦,base-3 為基礎的系統會有較低的電力消耗呢? > TODO: 閱讀 [yoelmatveyev/nutes](https://github.com/yoelmatveyev/nutes/tree/master),描述相關歷史背景,特別是前蘇聯時期的進展 > [name="jserv"][color=red] * [yoelmatveyev/nutes](https://github.com/yoelmatveyev/nutes/tree/master) 這篇的筆誤有點多,然後看不太懂後面解釋 HEAD 的行為 * 6 trits 的數值範圍應該是 -364 to 364 而不是 -362 to 362 * 為何 $1000_{bal3} + 1000_{bal3} = -187_{dec}$,不應該是$55_{dec}$嘛? * 描述相關歷史背景,特別是前蘇聯時期的進展 ## 研究方向與方法 * 這幾天看了一些資料,我覺得研究方向還沒真的出現,先在這邊稍微整理一下想法 1. 若是將大學所學過關於數位系統的知識框架全部從 binary 轉換成 Ternary 會有什麼關鍵性的差異? * 數位系統實驗裡面的邏輯扎改以 Ternary 實作(FUll add half adder...etc) * bit wise operator -> trit wise?? 2. 老師要求研究為何 Ternary 的電腦電力比較節省,希望能找到數據支持 3. 跟 2 很像,為何製程上 binary 會打敗 Ternary 成為現今電腦的主流,目前看到的論點是因為 Binary 就是單純的 `0`,`1` 所以好設計(因為電力本身就是`有`或`無`,相對來說就 `1`,`0`),但是 Ternary多了一個 unknown (0),所以不好設計。這點應該好好研究 Setun 可能會有頭緒 |Ternay|logic|Binary| |:--:|:--:|:--:| |1|True|1| |0|Unknown|| |-1|False|0| 4. 在一些偶然看到的 IOTA 的討論,對於字串的處理傳輸、字串格式等等有些許的討論,之後開始探討應用應該可以從這些點著手 5. 知呼尚有關於 Setun 的討論:https://www.zhihu.com/question/35937929