新しく発言する  EXIT  インデックスへ

合同式による水汲み問題の解法


  合同式による水汲み問題の解法 山中和義 2008/03/16 14:11:01  (修正1回)
  !合同式による計算機内部の整数演算(加算器... 山中和義 2008/03/16 14:13:27  (修正1回)
  │└つづき(乗算器) 山中和義 2008/03/16 14:16:08  (修正1回)
Re: !合同式による計算機内部の整数演算(加算器...  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/16 14:16:08 ** この記事は1回修正されてます
つづき(乗算器)


DEF cong(x)=MOD(x,m^N) !合同式 x'≡x (mod m^N)

SUB disp(x) !表記する
PRINT USING "########": x; !10進法
PRINT " (";right$(REPEAT$(" ",N-1)&BSTR$(x,2),N);")"; !Nビット符号なし2進法
PRINT " #";BSTR$(x,16) !16進法
END SUB


LET m=2 !進法
LET N=8 !桁数 ※8ビット -128〜127


LET a=12
LET b=-3

PRINT "入力された値 ※10進法"
PRINT "a=";a
PRINT "b=";b
PRINT


!LET N=2*N !ビット幅は2倍になる


!---------- ↓↓↓↓↓ ----------
PRINT "計算機内部の値(";m;"の補数) ※レジスタ、メモリ"
LET aa=cong(a) !N桁符号あり整数へ ※符号拡張
LET bb=cong(b)
PRINT "a=";
CALL disp(aa)
PRINT "b=";
CALL disp(bb)
PRINT


PRINT "乗算 ※ALU、アキュームレータ" !<--------------- ※加算との差異
PRINT USING " ########": aa
PRINT USING "×########": bb !<--------------- ※
PRINT "-----------"

PRINT USING "##########": aa*bb !最上位桁の桁上りを考慮した計算<--------------- ※

LET acc=cong(aa*bb) !最上位桁の桁上りは無視する<--------------- ※

PRINT " ";
CALL disp(acc)
!---------- ↑↑↑↑↑ ----------



PRINT
PRINT "出力装置での表示"
IF acc>=m^N/2 THEN !負の数なら(MSBが1)
LET dat=MOD(acc,-m^N) !N桁符号なし整数へ
!!!LET dat=acc-m^N !N桁符号なし整数へ
ELSE
LET dat=acc !そのまま
END IF
PRINT dat



PRINT
PRINT "検算 a*b=";a*b !<--------------- ※

END
  !連立1次合同方程式を解く 山中和義 2008/03/21 18:45:05 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。