我想了解爲什麼double-dabble算法正在工作,但我沒有得到它。爲什麼double-dabble算法有效?
有很多的步驟,偉大的描述和算法的目的,類似 http://www.classiccmp.org/cpmarchives/cpm/mirrors/cbfalconer.home.att.net/download/dubldabl.txt或 http://en.wikipedia.org/wiki/Double_dabble
也有解釋的一些嘗試。我發現的最好的是這一個: http://www.minecraftforum.net/forums/minecraft-discussion/redstone-discussion-and/340153-why-does-the-double-dabble-algorithm-work#c6
但我仍然覺得我缺少連接部分。以下是我得到:
- 我得到的,你可以通過從左至右,開始爲0的十進制值,遍歷二進制數的位數閱讀它們轉換二進制數十進制數,加1轉換爲二進制數中每達到1的十進制數,然後乘以2,當轉到下一個數字時(如上一個鏈接所述)。
- 但是,爲什麼這會導致double-dabble算法?我們不想用十進制進行轉換,我們想要以BCD進行轉換。爲什麼我們保持乘法(移位),但是我們放棄了1的加法?連接在哪裏?
- 我得到了,爲什麼我們必須添加3,當BCD字段中的數字在移位之前超過4。因爲如果你想讓BCD碼乘以2,如果你移動它,你必須做一些修正。如果您將BCD編號
0000 1000
(8)並且您想要得到雙重0001 0011
(16),您必須在轉移之前添加3(6的一半),因爲通過轉移您最終以0001 0000
(10)(您'失蹤6)。- 但是,爲什麼我們想要這個和發生1的加法在哪裏?
我想我只是缺少一小部分。