|
●概要 1億進数のBCD による浮動小数点方式である。基本的に、MegaLong と同じであるが、仮数部は、固定長のInteger配列で構成される。公称精度+拡張精度からなる。現在は、公称精度が4000桁で、拡張精度は96桁となっている。公称精度とは、数学関数値の正しさを保証する桁数と意味する。当然、ユーザの任意の演算による精度は保証できない。 ●構造○クラス構成 MegaLongでは構造体であったが、CompactLongではクラスになっている。クラスでは、どんなに深いネストでも参照で実行でき(つまり同じインスタンス)、メモリ消費を抑えられる。メンバーは非公開で、プロパティやメソッドのみでアクセスできる。基本的には、Newでインスタンスを生成して使用する。クラスのメンバーは以下の通り。 Public Class CompactLong プロパティ、メソッド群 符号 Public Enum CompactSign ○形式 符号、仮数、指数からなる。仮数部は、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) が、一般形式となる。現状、 n = 4096/8 = 512 となっている。 指数は±100京程度。 ●プログラミングの注意点 構造体は値渡しで、クラスは参照渡しとなるので、例えば、 A = B は、構造体では、B のコピーがA となるので、この後、A を変更しても、B には影響しない。しかし、クラスの場合は、A ≡B となるので、A は、B を意味する。つまり同じインスタンスを指す。従って、その後、A を変更すると、B が変更される。これを避けるには、 例えば、A = B.Clone などとする。下図参照。
|