山本ワールド
多倍長整数の除算(例3)
例3) 400,000,000,000/500,999,999の商と余りを求める。
リトルエンディアンで表記していますa[]={ 000,000,000,400 }; s=4;
b[]={ 999,999,500 }; t=3;
D=1000
正規化する。
k=D/(1+b[t]=10/(1+500)=1a=a*k; a[]={ 000,000,000,400 }; s=4;
b[]={ 999,999,500 }; t=3;
最上位の商の位置を求める
a[s]とb[t]を比較
400 < 500なので商の位置はu=s-t-1=4-3-1=0となる仮商はq'=(a[s]*D+a[s-1])/b[t]=400000/500=800
q'b[t-1]>Dr'+a[s-2]のチェック
r'=0800*500 >1000*0+0となるため--q' 及び r'+=b[t]を実行する
q'=800-1=799 r'=0+500=500;
再度 q'b[t-1]>Dr'+a[s-2]のチェック
799*500 <1000*500+500となるので次へ進むa-a-bq'
q[u]=799a=a-bq'
a=400,000,000,000-500,999,999*799=400,000,000,000-400,298,999,201=-298,999,201
答えが負なので仮商は大きい
q'=q'-1=799-1=798
a=a+b=-298,999,201+500,999,999=202,000,798 s=2
q[u]=798
t>s 3>2 現在のqが商であり現在のaをkで割ると余りが求められる
a=a/k=798
筆算の例
※IE7以下の場合、表示がずれます
798=q[]
----------------
b[]= 500,999,999)400,000,000,000=a[]
399,797,999,202
---------------
202,000,798=a[]