4

ダブルダブルアルゴリズムが機能する理由を理解しようとしていますが、理解できません。

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 の追加はどこで行われているのでしょうか?

私はほんの少しの部分が欠けていると思います。

4

4 に答える 4

0

全体的なアイデアは、リンクで説明されているシフトを使用することですが、左側の数値を BCD に変換します。各段階で、左側の実際の 2 進数に近づいていますが、数値が 2 進数ではなく BCD のままであることを確認してください。

「1」をシフトインすると、基本的にそれを追加します。

「add 3」引数の要点を取得するには、以下のリンクをご覧ください。

https://olduino.files.wordpress.com/2015/03/why-does-double-dabble-work.pdf

于 2015-06-13T09:09:49.603 に答える