四則演算方式 |
除算 |
最終更新日:2007/04/26 新規 |
●概要
配列 / 配列、配列 / Base の二通りの除算がある。配列 / Base
の除算は速い。演算は絶対値で行い、符号は別途調整される。指数部は減算で求められる。
●方法
いずれの除算も、商は、指定された精度(桁数)まで求める必要があるので、Base/Base であっても、例えばDoubleによる除算は使用できない。
○前処理
- 除数が Zero なら Overflow、双方が Zero なら NaN。
- 非除数が Zero ならZero。
- 同符号なら Positive、異符号なら Negative。
- 除数が、10n であれば、指数演算のみで終了。
- 取りあえずの指数は、非除数 - 除数 とする。
- 除数がBase 未満かどうかを検査。以下に続く。演算は、絶対値として行う。
○配列 / Base
仮数部同士の除算なので、最初の整数商は、0 〜 9 となる。従って、小数点は、二つ目の結果配列の直前にある。
結果の桁数は、別途設定された精度で決まる。割切れない場合は、精度桁まで求める。
A() が非除数の配列
B が除数Integer
C() が結果の配列。サイスは、精度/8
Dim i, ac, V As Integer
Dim R, CD As Long
ac = A.Length
CD = 0
For i = 0 To m_NumSize - 1 '精度/8 まで
If i < ac Then
V = A(i)
Else
'非除数配列がなくなったら 0 とする
V = 0
End If
R = V + CD * Base
'割るべき数
C(i) = R \ B
'整数商
CD = R Mod B
'剰余(キャリーダウンとなる)
If R = 0 Then Exit For '被除数がなくなっても終了
Next
○配列 / 配列
この除算では、ネイティブな除算命令は使用できなく、引き算とシフトで行う。バイナリーではないので、本来のシフト命令ではなく、10進の乗除算で行う。被除数から除数を何回引けるかを演算することになるので、時間が掛かる。部分商は10進1桁となる。
○正規化
この除算結果は、加減算と同じなので、加減算と同じ正規化を行う。
|