5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

プログラミングの為の数学と算数

1 :デフォルトの名無しさん:2001/08/07(火) 11:19
数学(まあ算数の範囲も含めよう)的な問題のTIPS/Q&Aスレです

個別にあるとすぐに下がってしまうのでこの領域の話題をまとめましょう

関連スレ>>2

102 :1:01/10/24 08:05
N進数M桁の多倍長の計算方法

 負数 各桁毎に(N-1)の補数を取り、 キャリーcyを1にする
cy=1;
for(i=0;i<M;i++){
 cy = a[i]+(N-1-b[i])+cy;
  c[i]=cy % N;
  cy =cy / N;
}

103 :1:01/10/24 08:18
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001998049&st=863&to=863&nofirst=true
あめ猫さんはちょっと間違ったみたい
0x10000 じゃなくて 0x10000-1 です

で補数を取った時の掛算のやり方
 1、 絶対値を求めてから掛算して 結果の符号によって再度負数にする方法
    桁数を可変にする多倍長の場合はこっちでやった方がいいかも

 2、そのまま掛算する場合は
    Bが負数の場合 Bを単純整数とみなすと B-N^Mになりますから
    A*(B-N^M)=A*B-A*N^M
   A,Bがともに負数の場合は
    (A-N^M)*(B-N^M)=A*B-(A+B)*N^M+N^M^2 ・・・・N^M^2 は桁外になるので

   結局 A,Bを符号無整数とみなして掛算して 負数なら M桁目から引けばよいという事になります

104 :1:01/10/24 08:52
10進数でやってみます。2桁としますが符号の為に3桁目を用意します

 23−49 の計算
最下位桁:CY=1; 3−9+CY = 3+10−1−9+CY=4
次の桁 :CY=0; 2−4+CY = 2+10−1−4+CY=7
最上位桁:CY=0: 0−0+CY = 0+10−1−0+CY=9

結果974となります。最上位の9は負数を示します
これをさらに符号を反転するには0から引算します。
最下位桁:CY=1; 0−4+CY = 0+10−1−4+CY=6
次の桁 :CY=0; 0−7+CY = 0+10−1−7+CY=2
最上位桁:CY=0: 0−9+CY = 0+10−1−9+CY=0

掛算のやりかた
掛算2桁X2桁で4桁になり、符号の為に5桁目を用意します
 −26*12=-312 の計算
まず負数を補数表現にして
 974*12=>74*12−7400=888-1200=−312

32 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)