|
●演算方式 仮数部の配列 * 配列または、配列 * Integer(Base未満)とがある。オペランドを調べて内部で自動的に選択される。Integerのオペランドであっても、値がBase(100000000)以上の場合もある。 ●符号/結果の事前調整
●要素乗算(部分積) 乗算の基本となるもの。仮数部配列とIntegerの乗算になるが、仮数部なので、例えば、123 * 89 は、 12300000 * 89000000 と言う乗算となる。これを繰り返しているだけである。要素乗算の結果は、Long配列にし、要素間の桁上げは行わない。これは、少しでも速度を稼ぐためである。下図参照。桁上げは、別途必要に応じて行う。 以下の手順で行う。
●配列 * Integer 結果の配列サイズは、オペランド配列サイズ+1 となる。上記の部分積のLong配列を、最終結果のInteger配列に変換する。下位の要素から、値がBase未満部分をInteger配列の値とし、Baseを超える部分を上位に桁上げする。これを繰り返す。 ●配列 * 配列 部分積を繰り返し、部分積結果を直前の部分積結果と加算しながら桁上げ処理を行う。桁上げは都度しないと、Longでもオーバーフローしてしまうことがある。Longより長い数値型があれば、もっと高速になるが。残念ながら、DecimalはBCDなので遅くて利用できない。 以下のようにして演算する
●正規化 乗算の結果は以下のようになる。 乗算結果の配列 正規化は以下のように行う。
|