ごとけんです

# どこから返事したらいいんだか ^^;;;

In message "[ruby-math:00209] Re: (summary) SingleFloat, DoubleFloat < Float"
    on 00/02/01, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>|メモリ占有量が少ない、ということは Matrix(SingleFloat) の
>|大きな存在理由だと思います。
>|double の精度よりも配列の要素数を増やしたい場合に、
>|同じメモリ量で要素数を倍にできますから。
>
>もちろんそれは理解しています(つもりです)。Matrix(SingleFloat)
>には積極的に賛成します。

これは分かりやすいんですけど、あくまでMatrixのはなしなので、
確かに、コレはコレですね。

>Matrix(SingleFloat)を中心としたRubyによる処理のためには単精
>度の浮動小数点数が必要なのだという話になれば理解できます。現
>時点ではまだ理解できてませんが。

この点をうまく伝えなければイケナイのだけど、難しいなぁ。

まず、float を扱うライブラリラッパのプロトタイピングやアプリ
ケーションで is_a? を使った条件分岐を要素レベルで書きたいと
いうのが一つ。

精度制御の実例を提供したいのが一つ。

それと、C(FOTRAN)でやるのと同じ float (REAL)の計算をお手軽に
やりたいのが一つ。

しかし一番の理由は、原理的に float と double は必ずしも近似
の程度のヨシアシを意味しないということです。その意味でfloat
とdoubleはdoubleがfloatよりも高価だが安全といった視点自体が
成り立たないような使われ方が一般にはされてしています。もちろ
ん誤差評価論的には繰り返しを何回やったらこれだけ「本当の値」
からズレますよということを言うのだけど、実際は物理系の数値実
験では、再現なく繰り返しを行って極限状態を見積ることが多いの
で、そういうことを言われても困ってしまうわけです。

これは現時点では数値計算業界的にもややマイナーな話題であるこ
とは否めないのだけれど、「全然違う」という背景はその辺にある
ので、ちょっとややこしいはなしですが説明してみますね。

まず、個々の演算に対して、その結果は「本当の値」とどれくらい
離れているかを評価出来ます。それから加減算に関しては繰り返し
行ってもその結果がどれくらい離れるかという評価も出来ます。

しかし乗除等を含む(つまり非線形な)計算を繰り返し演算を行う場
合、その漸近挙動は「本当の値」と比較することが原理的に出来な
い場合があります。いいかえれば、繰り返しの演算が生み出す値の
系列は一般には「本当の値の系列」と似ているとは限りません。い
くつかの系では似ていないことが確認されていますが、実際問題と
して「本当の値」が分からないから数値計算をするのであってある
意味確認のしようがないというのが実情です。

広く使われるアルゴリズムはそのようなことがないことが確認され
たモノが選ばれていると思いますが、実際に離散化の構造(つまり
浮動小数点数の構造)を吟味された繰り返しアルゴリズムはそんな
に多くはありません。厳密な理論の一つは擬軌道追跡性と呼ばれる
モノです。これは近似の任意の繰り返しはやはり近似であるという
性質をキチンとあらわした概念です。しかし非常にありふれた演算
(たとえば2乗)の繰り返しでも擬軌道追跡性を持っていないことが
知られています。その意味では擬軌道追跡性はタイトすぎるという
批判もありますが、よりよい指標があるわけでもないです。

この問題の本質は繰り返し演算の大域的性質(定義域全体にわたる
性質)を特徴付けるある種の不変集合(具体的には不安定多様体)の
構造が離散化によってガラリと変わってしまうことです。簡単な例
だと、f(x) = x という方程式の解が浮動小数点数上にない場合が
あります。単にズレているというだけではなく、たとえば f(x0) =
x1, f(x1) = x0 という2つの点に分裂している場合などです。この
場合 x を線形結合して拡大するような系だとこの微妙な振動が最
終的にはシステムスケールにまで拡大されます。

で、こういうことが起こるかどうかというのは、離散化の方法その
ものによるのでたとえば float の方が「本当の値の系列」に近い
モノが得られる場合もあります。ただ、このようなこと自体を狙っ
て float を使うというわけではありません。もともと浮動小数点
数の意図はより長い幅を用意していればより良く近似できるという
ところにあったのですが、その意図が機能しない文脈も多数あるの
で、そのことを感覚として理解するためにも言語には2つ以上の異
なる精度の浮動小数点数があることを望みます。

-- gotoken