|
|
●概要 ここで扱っている数値や浮動小数点について技術的に説明する。 ●数値とは? 普段、何気なく使っている数値であるが、実は、深い意味がある。例えば、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万桁)で演算するのは、余りに無駄が多く、また時間が掛かりすぎることになる。従って、目的の精度を指定して、無駄なく演算する仕組みが必要となる。 |