ダブルダブルアルゴリズムが機能する理由を理解しようとしていますが、理解できません。
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
でもまだ接続部分が足りない気がします。ここに私が得るものがあります:
- 2 進数を 10 進数に変換するには、10 進数値 0 から始めて、2 進数の桁を繰り返し、1 に達するたびに 10 進数に 1 を追加します。 2 進数で、次の桁に移動するときに 2 を掛けます (最後のリンクで説明したように)。
- しかし、なぜこれがダブル ダブル アルゴリズムにつながるのでしょうか? 10 進数ではなく、BCD で変換したいのです。乗算 (シフト) を維持するのに、1 の加算を削除するのはなぜですか? 接続はどこですか?
- シフトする前に BCD フィールドの数値が 4 を超えると、なぜ 3 を加算する必要があるのかがわかります。シフトするとBCD数が2倍になるようにするには、いくつかの修正を行う必要があるためです。BCD 数
0000 1000
(8) をシフトして double (16) を取得したい0001 0011
場合は、シフトする前に 3 (6 の半分) を追加する必要があり0001 0000
ます。 6)。- しかし、なぜこれが必要なのですか? 1 の追加はどこで行われているのでしょうか?
私はほんの少しの部分が欠けていると思います。