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

上へ
基本事項
ソフトウェア構成
UltraLong構造体
UltraMath
FFT
プログラミング例
UltraPrecisionユーティリティ
FFT試験
レガシ演算速度
FFT演算速度
数値/浮動小数点/精度
定数システム
レガシ四則算
FFT乗算
ニュートン法
逆数法
数学関数
時間評価システム
限界値自動決定システム
数学定数算出

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

数値/浮動小数点/精度

最終更新日:2006/04/12

●概要

 ここで扱っている数値や浮動小数点について技術的に説明する。

●数値とは?

 普段、何気なく使っている数値であるが、実は、深い意味がある。例えば、10進で、12345 は、

    5 * 100 + 4 * 101 + 3 * 102 + 2 * 103 + 1 * 104

であり、これを、その係数を重みの大きい順に羅列する約束にしているのである。このとき、10を基数(Radix)と言う。10でなくとも構わない。一般に、R進数は、

  N = (ki * Ri)    [i = 0 to M - 1、R > 0、0 = < ki < R]

と表せる。これを、kM-1・・・・k2k1k0 と表記する。特に、R進数を明示する場合は、

  (kM-1・・・・k2k1k0)R

などと表記するらしい。

●UltraLong数値

 UltraLongでは、1億進数なので、R = 100000000 となる。各係数ki を、Integer配列の各要素に格納することで、数値を表現している。

●浮動小数点

 しかし、浮動小数点なので、数値は仮数部であり、左寄せとなる。つまり、Integer配列の最初の要素の最上位桁は、必ず、0でない数字になる。例えば、123.0000004567890 は、

となる。この場合、指数部は、2 となっている。

今、5 + 7 を考えると、

などとなる。実際、内部の演算は、50000000 + 70000000 を行っており、結果は、正規化され、1.2E+1 となる。乗算でも、実際に、50000000 * 70000000 を行う。

●正規化

 ここで言う正規化とは、仮数部のInteger配列の先頭の最大桁(10000000台)の数字が、0 でないようにすることである。例えば、12300000 も、0.0000000123 も全く同じ仮数部になる。詳しくは、それぞれの演算解説にて行っている。

精度

 常にフル精度(100万桁)で演算するのは、余りに無駄が多く、また時間が掛かりすぎることになる。従って、目的の精度を指定して、無駄なく演算する仕組みが必要となる。