実数の計算:浮動小数点vs TTE vsドメイン理論vsなど


19

現在、ほとんどの一般的な言語での実数の計算は、まだ浮動小数点演算を介して行われています。一方、タイプ2有効性(TTE)やドメイン理論などの理論は、実数の正確な計算を長い間約束していました。明らかに、浮動小数点の精度の問題は関連性で低下していません。なぜこれらの理論がより主流にならないのか、そしてなぜそれらのより顕著な実装がないのか?

たとえば、浮動小数点エラーをあまり気にしないアプリケーションのドメインはありますか?複雑さに関する重大な懸念事項はありますか?

回答:


17

私は実数計算で働いており、本当の答えを知っていればよかったです。しかし、私は推測することができます。それは社会学的な問題だと思います。

正確な実際の算術に取り組む人々のコミュニティは、ソフトウェアの開発に慣れていない理論家で構成されています。そのため、通常は実装タスクを学生に委任します(注目すべき例外はNorbertMülleriRRAMです)か、独自のおもちゃ実装を持っています

必要なプログラミングモジョを持っている人に、必要な理論的背景がありません。強固な理論的基礎がなければ、正確な実際の計算を正しく設計することは困難です。たとえば、forループに多くの実数を追加するのは間違いです。精度の低下により許容できないパフォーマンスが得られるためです。たくさんの実数を追加したい場合は、部分和の大きさを考慮して、ツリーのような構造でそれを行う必要があります。全体で取得することは困難であるもう一つは、ということである<=実数の合計ブール関数は、単純に(あなたが持つことができる存在しないとして=、それのいずれかを返すfalseか、それが発散し、<二つの等しい実数が与えられたときに発散)。

最後に、正確な実際の算術演算のためにライブラリを実装する方法を知っているかどうかはまったく明確ではありません。それらは、いくつかのデータ型といくつかの関数を定義するだけの通常のライブラリではありません。多くの場合、正確な実算には特別な制御モードが必要です。たとえば、iRRAMはプログラムのメイン実行(文字通りハイジャックmain)と標準入出力を引き継ぐため、精度が失われたときにプログラムを再実行できます。Haskellでの実際の算術ライブラリは、Stagedモナド(本質的にはReaderモナド)で発生します。ほとんどの人は実数が「単なる別のデータ型」であると期待していますが、それについては疑問があります。


私は正確な実算にほとんど完全に無知ですが、その中にKahan加算を実装することはできませんか?
jjg

1
うーん、そうは思いません。正確な実数演算は、所望の出力精度を達成するために中間精度を自己調整する区間演算と考えてください。
アンドレイバウアー

3
実数は無限のオブジェクトであるという事実とプログラマチックに実行できることの結果についてのプログラマーの理解不足に加えて、ハードウェアサポートの不足も重要だと思います。正確さのためだけに、かなりの時間とメモリのオーバーヘッドを持つものを使用するように人々を説得することは困難です。
カヴェ

1
共誘導型を使用した実際の計算の実装には、いくつかのアクティビティがあることがわかりました。共誘導型を正しく扱うのはまだかなり難しいと感じています(私は確かにその専門家ではありません)が、これは正確な実際の計算のより広範な使用の見込みがあると思いますか?
SorcererofDM

3
数字のストリーム、または固定の収束レートを持つ他の何かを使用する実装は、最初からハンディキャップがあり、収束が遅すぎます。また、ストリームベースの実装では、前の近似値をすべて計算して次の近似値を取得する必要がありますが、これも設計ミスです。
アンドレイバウアー

10

一般に、人々は常に浮動小数点エラーを気にします。しかし、私はAndrejに同意せず、浮動小数点数が社会学上の理由から(ほとんどの場合)任意精度の実数よりも好ましいとは思いません。

実数の正確な計算に対する主な議論はパフォーマンスの 1つだと思います。つまり、精度よりもパフォーマンスが重要な場合は常に、浮動小数点数を使用する必要があります

思い浮かぶアプリケーションは、計算流体力学を使用して車や飛行機の空力を設計することです。計算の小さな誤差は、多くの普及しているプロセッサに見られる専用の浮動小数点ユニットを使用する天文学的な利点で簡単に補われます。

特に、固定数のビットを使用して広範囲の実数を表す問題は、一見すると思えるほど簡単ではありません。数値シミュレーションでは、値は大きく変動する可能性があるため(乱流がある場合など)、固定小数点の計算は適切ではありません。

ハードウェアによって精度が固定されていない場合でも、任意の精度の数値を使用すると、浮動小数点の数値を使用するよりも桁違いに遅くなる可能性があります。実際、すてきな場合でも、すべての数値が合理的であるため、マトリックスの反転などの単純な操作は、分母を制御するのが難しい大きな結果になる可能性があります(例についてはこちらを参照)。多くの大規模な線形最適化パッケージは、この正確な問題のために適切な丸めモードで浮動小数点を使用して近似解を見つけます(たとえば、ここにあるプログラムの大部分を参照)。


1
何らかの形式の正確な実数計算と浮動小数点計算の間に証明されたギャップはありますか?
SorcererofDM

1
私が知っていることではなく、私は恐れています。ショーン・ガオは実数以上のおおよその決定手続きの複雑さに、いくつかの興味深い結果を持っている(彼の参照論文のアブストラクトを)、そしてもちろん行列の逆の分母は、そのような最悪で成長する決定
コディ

-6

π

私のポイントは、正確に計算する場合、特別な名前のプレースホルダーと、おなじみの自然名のプレースホルダーが必要だということです。ある時点で、実際の世界の何かに適用するために、正確な値を近似したいと思うでしょう。結局のところ、非常に特殊なニーズがない限り、最初から近似として問題全体を処理する方がはるかに効率的です。

R

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.