ホーム ] 概要 ] プログラミング仕様 ] 演算速度 ] 技術解説(システム編) ] 技術解説(四則演算編) ] 技術解説(FFT編) ] 技術解説(数学関数編) ]

上へ
関係演算方式
四則演算方式

技術解説(四則演算編)

四則演算方式

最終更新日:2007/04/26 新規

●概要

 ここでの加減乗除演算は、いわゆる筆算と同じ手順で行う方式である。MegaLong の数値形式で基本的に演算が正しく行えることは既に説明している。ここでは、その上位概念を説明する。

●共通事項

 四則演算では、おおむね以下の手順で行う。但し、C = A op B なる形式であるとする。

  1. オペランド A、B をMegaLong で受ける。結果を、C なるMegaLong に返す。
  2. メモリ消費を押さえるため、MegaLong や配列は参照渡しとする。
  3. 演算は、仮数部のInteger配列で行う。
  4. 結果も、Integer配列となる。
  5. 結果は必ず正規化される。

加算

 補数方式ではないので、負数があると面倒な処理が必要となる。全て絶対値演算になり、符号は別途調整される。加算といえど、減算になる場合もある。

減算

 補数方式ではないので、負数があると面倒な処理が必要となる。全て絶対値演算になり、符号は別途調整される。減算といえど、加算になる場合もある。

乗算

 配列 * 配列、配列 * Base の二通りの乗算がある。配列 * Base の乗算は速い。演算は絶対値で行い、符号は別途調整される。指数部は加算で求められる。

除算

 配列 / 配列、配列 / Base の二通りの除算がある。配列 / Base の除算は速い。演算は絶対値で行い、符号は別途調整される。指数部は減算で求められる。

●自動乗除算

 Div、Mul命令による乗除算は、オペランドの桁数より、演算方式を自動的に切り替えている。これは、システム変数が測定され設定されていれば意味のある状態となる。

○除算

 除算には、通常除算(多倍長/Base、多倍長/多倍長)と逆数除算がある。A/B では、以下のように B の桁数で自動切換えを行う。

  • 8 桁以下:LDiv にて、多倍長/Base が演算される
  • ReciproLimit 以下:LDiv が演算される。
  • それ以上:RDiv が演算される。

○乗算

 乗算には、通常乗算(多倍長 Base、多倍長*多倍長)とFFT乗算がある。A*B では、以下のように A または B の桁数で自動切換えを行う。

  • 双方が 8 桁以下:Base*Base が直接演算される
  • どちらかが 8 桁以下:LMul の 多倍長*Base が演算される
  • 桁数の短い方が、MulSLimit 以下:LMul が演算される
  • 桁数の長い方が、FFTLimit 以下:LMul が演算される
  • それ以上:FMul が演算される