山本ワールド
多倍長整数の除算(例2)
例2) 450000000/59999の商と余りを求める。
リトルエンディアンで表記していますa[]={ 0,0,0,0,0,0,0,5,4 }; s=8;
b[]={ 9,9,9,9,5 }; t=4;
D=10
正規化する。
k=D/(1+b[t]=10/(1+9)=1a=a*k; a[]={ 0,0,0,0,0,0,0,5,4 }; s=8;
b[]={ 9,9,9,9,5 }; t=4;
最上位の商の位置を求める
a[s]とb[t]を比較
4<5なので商の位置はu=s-t-1=8-4-1=3となる仮商はq'=(a[s]*D+a[s-1])/b[t]=45/5=9
q'b[t-1]>Dr'+a[s-2]のチェック
r'=09*9 >10*0+0となるため--q' 及び r'+=b[t]を実行する
q'=9-1=8 r'=0+5=5;
再度 q'b[t-1]>Dr'+a[s-2]のチェック
8*9 >10*5+0となるため--q' 及び r'+=b[t]を実行するq'=8-1=7 r'=5+5=10;
r'=Dなのでq'は正しい
q[u]=7a=a-bq'
a=450000-59999*7=450000-419993=30007
a[]={ 0,0,0,7,0,0,0,3,0 }
答えが正なので仮商は正しい。
q[]={ 0,0,0,7}
2桁目の商を求める
a[]={ 0,0,0,7,0,0,0,3,0 }; s=7b[]={ 5,5,5,5,5 }; t=4;
a[s]とb[t]を比較する。
3>5なので商の位置はu=s-t=7-4-1=2となる仮商はq'=(a[s]*D+a[s-1])/b[t]=30/5=6
q'b[t-1]>Dr'+a[s-2]のチェック
r'=06*5 >10*0+0となるため--q' 及び r'+=b[t]を実行する
q'=6-1=5 r'=0+5=5;
再度 q'b[t-1]>Dr'+a[s-2]のチェック
5*5 <10*5+0となるため q'は正しい q[u]=5a=a-bq'
a=300070-59999*5=300070-299995=75
a[]={ 0,0,5,7,0,0,0,0,0 } s=3
答えが正なので仮商は正しい。
q[]={ 0,0,5,7} u=3
t>sなので、現在のqが商であり現在のaをkで割ると余りが求められる
a=a/k a[]={ 0,0,5,7,0,0,0,0,0 }
筆算の例
※IE7以下の場合、表示がずれます
7500=q[]
----------
b[]= 59999)450000000=a[]
419993
-------
300070=a[]
299995
-------
00075=a[]