? ry 整数とモジュール分割が必要です。 これは単純な再帰式ですが、整数と剰余演算とが必要 。 除算は、次のアルゴリズムとして実装できます ? ry 与えられたとき、Bは2だけ増加し、次の増加がBよりAより大きくなるまで増加する。 2つの数AとBが与えられた時 B を、 B が A より大きくなるまで 2 倍 ? ry させると同時に、別の変数Iを2だけ増やします。これは1に初期化されています。 Bを増加させ同時に、 1 に初期化されている別の変数 I を 2 倍 ? ry と、私は除算の結果の一部を保持しますか? 残りはABと元のBを ry 。 BがAより大きくなると、 I は除算の結果の一部を保持し - 残りは A - ( 訳注 : 前回の ) B と元の B とを使用してさらに計算 。 これは再帰的にすべてのIを蓄積することができます。 A <Bの最後のステップでは、Aはモジュラスです。 このアルゴリズムは、Cの短い再帰関数として実装できます ? 終了時に、この関数は引数jの結果と除算モジュラスとして整数除算を返します。 この整数除算その結果と、そして引数 j の除算モジュラスとを、この関数は終了時に返します。 0070オーバーテクナナシー2019/06/07(金) 11:25:13.50ID:UxZyTg4h スレ建て乙です NG紹介ありがとうございます 0071yamaguti2019/06/07(金) 11:25:47.23ID:4Z3mBigD>>69 int a, int b, int * j) {
if( a < b ) { *j=a; return 0; } // 0を返します。
int b1=b, i=1, bp, ip;
next: // 次: bp = b1; ip = i; b1 *= 2; i *= 2; if( b1 > a ) return ip+divMod(a-bp,b,j); goto next; ? // 次へ進む。 // next へ行く; }
? ry できるので、コンパイラはブール値や整数式を気にする必要がなく、より ry 。 この作業はパーサ内で行うことができ、するとコンパイラは、ブーリアンか整数か式に付いてを気にする必要がなくそしてより単純なコードを生成 できます。 0073yamaguti2019/06/07(金) 11:27:32.45ID:4Z3mBigD ? ry 、次のようになります。 ブール変数が式で整数として使用 場合、次の様に :
x Z ?+3; x; Z ? x≠z + 3であり、 バツ; Z 0074yamaguti2019/06/07(金) 11:28:29.35ID:4Z3mBigD Z x ? + 3 x > 0 次の行のアドレス + 3 ( = 4 - 1 ) 番地つまり次の次の行から実行 Z Z ■ → ? グーグー x Z ■ → Z x == 0
x < 0
? 図3条件付きジャンプを表す図 図3 条件ジャンプを表すダイアグラム
?16?
Page 17
? ry 0より小さい、等しい、またはより大きい場合の簡潔 ry とおりです。 値が0より小さいか等しい、か、より大きいかの簡潔なチェックは次の通りで :
Z x ?+3; Z Z G; x Z E; Z; L:
、L、E、およびGは、xがそれぞれ0より小さい、等しい、または大きい場合の実行に合格するアドレスです。 図3に実行のスキーマを示 ? xが変わらず、Zがゼロであることに注意してください。 x は変化しない、そしてどんな exit に於ても Z はゼロである、に注意。 0075yamaguti2019/06/07(金) 11:29:26.36ID:4Z3mBigD 5.結果
1 FPGA上のSubleq、28プロセッサで並列 62.0 2 PC上のサブレック(エミュ ) 865 ? ry 付き3 C、PC上で実行可能な実行0.15 3 乗算付 C 、実行形態を PC 上で実行 0.15 ? ry 付き4 C、PC 12060でエミュ ry たSubleq 4 乗算付 C 、PC でエミュ Subleq 12060 ? ry なしの5 C、PC 7.8で実行可能な実行 5 乗算なしの C 、実行形態を PC 上で実行 7.8 ? ry なしの6 C、PC 9795でエ ry たSubleq 6 乗算なしの C 、PC でエミュ Subleq 9795