ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

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

多倍長演算ライブラリ(MegaPrecision)

概要

最終更新日:2006/12/16  修正

●概要

 本来、この類のものは高速な演算が目標であるが、C言語ではなく、VB.NET で作っている。一般的には、VB では、VC++ MFC(ネイティブコードアプリ) の20〜30% 程度速度は遅くなるといわれている。しかし、近年のPC の高速化のお陰で、科学演算向けであっても、VB はその使用に耐えるようになっているように思える。絶対に言えることは、圧倒的なコード量の差であろう。多分、数十分の1で済んでいる。また、ガベージコレクションのオーバーヘッドが大きいが、ガベージコレクションの効果は言うまでもない。

 .NET2005では、演算子(+-/*など)を定義できるが、オペランドがByVal (実体のコピーが生成され、メモリを消費する)のみとなり、多倍長では効率が悪いので利用しない。

●概略仕様

  • 最大の有効桁数は10進で200万桁となっている。但し、定数は100万桁+α となるので、演算は100万桁強となる。
  • 有効精度(桁数)を最大まで64から8の倍数で任意に指定できる。これを公称精度とする。
  • 内部の数値は、独自の構造体(MegaLong) にて保有、処理される。基数を1億とする一種のBCD で表現された10進浮動小数点形式である。指数部は、Integer(4バイト) の範囲まで。バイナリ形式はサポートしていない。
  • 整数型はないが、完全な整数演算はできる。
  • 内部は公称精度+拡張桁以上で演算され、結果は、公称精度+拡張桁になる(丸めではなく切捨て)。級数などの収束条件は、-(公称精度+拡張桁/2)としている。
  • 拡張桁は任意に設定できる。16 〜 64 で、8 の倍数。初期値は16。ニュートンなどの収束ができなくなる可能性があるので 0 にはできない
  • 基本的な関係演算、四則演算、FFT乗算、逆数除算、各種数学関数機能をもっている。
  • 数学定数は、精度100万桁を内部で保有しており、必要に応じて切出して使用する。
  • 個人の趣味の範囲を超えるものではない。

●定数システム

 π や e などの数学定数は、100万桁の精度で特別な形式のバイナリーファイルとして保有している。初めて定数の参照があったときに、ファイルから読み出しておく。必要に応じて、公称精度(公称精度+拡張桁)に従った定数を参照できるようにしている。

●演算時間予測システム

 特に数学関数などでは、高い精度での演算時間が長くなる。数時間、数日間などとなる場合がある。MegaPrecision では、実測した基本演算時間を元に、演算内容(ニュートン法や級数展開、四則演算など)を与えると、その演算時間をシミュレーションし予測する機能がある。但し、実行するマシンで測定した値が必要となる。