ホーム ] 実行時間計測ラブラリ ] EXIF情報ライブラリ ] 文字式演算 ] クイックソートライブラリ ] 多倍長演算ライブラリ ] 多倍長演算ライブラリU ] 画像処理ライブラリ ]

上へ
多倍長語の構造
プログラミング仕様
インストール
ユーティリティ
数学定数システム
四則演算
数学関数

多倍長演算ライブラリU(CompactPrecision)

多倍長語 CompactLong の構造

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

●概要

  1億進数のBCD による浮動小数点方式である。基本的に、MegaLong と同じであるが、仮数部は、固定長のInteger配列で構成される。公称精度+拡張精度からなる。現在は、公称精度が4000桁で、拡張精度は96桁となっている。公称精度とは、数学関数値の正しさを保証する桁数と意味する。当然、ユーザの任意の演算による精度は保証できない。

●構造

○クラス構成

 MegaLongでは構造体であったが、CompactLongではクラスになっている。クラスでは、どんなに深いネストでも参照で実行でき(つまり同じインスタンス)、メモリ消費を抑えられる。メンバーは非公開で、プロパティやメソッドのみでアクセスできる。基本的には、Newでインスタンスを生成して使用する。クラスのメンバーは以下の通り。

Public Class CompactLong
   Friend ValueArray(FullSize - 1) As Integer
   Friend Sign As CompactSign = CompactSign.Zero
   Friend Exp As Long = 0
   Friend ValidSize As Integer = 0           '値が入っている配列要素数

プロパティ、メソッド群

符号

Public Enum CompactSign
   Negative = -1
   Zero = 0
   Positive = 1
   Overflow = 2
   NaN = 3
End Enum

○形式

 符号、仮数、指数からなる。仮数部は、108(1億)を基数としたBCDで、 0 超過、1 未満を表す。

 ± 0.9999・・・・・・9999 ±指数 (10±指数)

数式で表現すれば、

  Sign・Σ(ai・10-8・(i+1))・10Exp  (i = 0 to n - 1、Sign = -1 or 1)

 
但し、108 > a0 ≧ 107、108 > ai ≧ 0 (i>0) が正規化状態

が、一般形式となる。現状、 n = 4096/8 = 512 となっている。 指数は±100京程度。

●プログラミングの注意点

 構造体は値渡しで、クラスは参照渡しとなるので、例えば、

 A = B

は、構造体では、B のコピーがA となるので、この後、A を変更しても、B には影響しない。しかし、クラスの場合は、A ≡B となるので、A は、B を意味する。つまり同じインスタンスを指す。従って、その後、A を変更すると、B が変更される。これを避けるには、 例えば、A = B.Clone などとする。下図参照。