固定小数点と任意精度の計算の関連性


10

浮動小数点演算のライブラリ/パッケージはほとんどありません。浮動小数点表現のさまざまな不正確さを考えると、この増加した精度が固定小数点での作業の複雑さの価値があるかもしれないフィールドが少なくともいくつかない理由が問題になります。

たとえば、固定小数点固有値ソルバーを使用する上で大きな問題はありますか?彼らはどのくらい遅く/速く、不正確/正確でしょうか?

関連:これこれ


ミリンドR、ご質問ありがとうございます。あなたの質問は興味深いと思いますが、おそらくサイトには不適切です。ガイダンスについては、サイトFAQをご覧になることをお勧めします。あなたの質問を見ると、サイトにふさわしい質問の要素はあると思いますが、それは暴言の始まりであるような印象を受けます。計算科学における整数演算と固定小数点演算の多くのアプリケーションがあるかどうかを尋ね、それらの演算と浮動小数点との比較を求めることは価値があります。投稿を編集することをお勧めします。
Geoff Oxberry 2013年

はい、それは暴言から生まれましたが、私はそれを現状の正当化を求めるものと表現しました。私の質問は、ご想像のとおり、集中数値の整数および固定小数点演算への大きなシフトができない理由についてです。私に代わって編集していただけますか?私は本当に試しましたが、私の質問がどのように適切ではないのかわかりません。
Milind R 2013

5
これには客観的な技術的答えがあると思います。ほとんどすべての科学計算(たとえば、線形解法)を実行すると、正確なストレージに必要なビット数は時間とともに指数関数的に増加します。したがって、有用な作業には不正確さに対する強力なサポートが必要です。
ジェフリーアーヴィング

@MilindR:計算幾何学コミュニティは、高性能で正確な実数計算に関心を寄せています。私は推測するあなたに関連するすべての実用的な問題は、この研究分野で観察することができるという。検索できる例は、ライブラリLEDAです。
shuhalo

@GeoffreyIrving三角行列のゼロはどうですか?彼らは次のように保存することができない何も不正確なエラーが発生しやすい浮動小数点以外の?
Milind R 2013

回答:


5

特定の状況では、固定小数点演算の使用が適切な場合があります。一般に、科学計算では(少なくともほとんどの人がそれを考えるという意味で)、遭遇する大きなダイナミックレンジを表現する必要があるため、適切ではありません。あなたは例として固有値問題に言及しますが、科学では非常にしばしば、行列の最小固有値に興味があります(たとえば、量子システムの基底状態の計算に)。固定小数点を使用する場合、小さな固有値の精度は、大きな固有値に比べて一般にかなり低下します。行列に大きな比率で変化するエントリが含まれている場合、小さな固有値は実際の精度では完全に表現できない場合があります。これは数値の表現に関する問題です。これらの引数は、中間計算の方法に関係なく保持されます。スケーリングを計算して計算結果に適用することもできますが、これで浮動小数点が発明されました。要素が適切に動作するが、固有値の動作が非常に悪い行列(ウィルキンソン行列、または完全に整数のエントリを持つ行列です。これらの例は見た目ほど病理的ではなく、科学の最先端での多くの問題は非常に不十分に動作する行列に関係しているため、このコンテキストで固定小数点を使用することはBad Idea(TM)です。

結果の大きさがわかっていて、指数のビットを無駄にしたくないと主張するかもしれないので、中間体について話しましょう。固定小数点を使用すると、より高い精度で作業するために本当に苦労しない限り、一般に壊滅的なキャンセルと丸めの影響が悪化します。パフォーマンスのペナルティは非常に大きくなるため、同じ仮数ビット幅で浮動小数点表現を使用すると、より高速で正確になると推測します。

固定小数点が当てはまる可能性のある領域の1つは、幾何学計算の特定の領域です。特に、正確な演算が必要な場合、またはすべての数値のダイナミックレンジを事前に知っている場合は、固定小数点を使用すると、表現のすべてのビットを利用できます。たとえば、2本の線の交点を計算し、2本の線の端点が何らかの方法で正規化されて単位正方形に収まるとします。この場合、交点は、同等の浮動小数点数を使用するよりもビット数の高い精度で表すことができます(指数のビットが無駄になります)。さて、この計算に必要な中間数をより高い精度で計算する必要があるか、少なくとも非常に注意深く(2つの数値の積を別の数値で割るときのように、非常に注意する必要があります)。この点で、固定小数点は計算の観点からよりも表現の観点からより有利であり、アルゴリズム出力のダイナミックレンジに明確な上限下限を設定できる場合、これは一般的に言えることです。。これはめったに起こりません。

私は、浮動小数点表現が粗雑または不正確であると考えていました(なぜ指数にビットを無駄にするのですか?)。しかし、時間が経つにつれ、それが実数の可能な限り最良の表現の1つであることに気付きました。自然界のものは対数スケールで表示されるため、実際のデータは広範囲の指数にまたがります。また、可能な限り最高の相対精度を達成するには、対数スケールで作業する必要があり、指数の追跡がより自然になります。「自然な」表現に対する他の唯一の候補は、対称レベルインデックスです。ただし、その表現では足し算と引き算がはるかに遅く、IEEE 754のハードウェアサポートが欠如しています。浮動小数点標準には、非常に多くの検討が行われました。、数値線形代数の柱による。彼は数字の「正しい」表現が何であるかを知っていると思います。


4

正確な演算/固定小数点演算がほとんど使用されない理由の例として、次のことを考慮してください。

  • 有限要素法では、科学計算で使用されている他のほとんどすべての方法と同様に、現実世界の近似にすぎない線形または非線形システムに到達します。たとえば、FEMでは、解く線形システムは元の偏微分方程式の近似にすぎません(それ自体は、実世界の近似にすぎない場合があります)。では、なぜ近似に過ぎないものを解決するために多大な努力を払う必要があるのでしょうか。

  • 今日使用しているアルゴリズムのほとんどは、本質的に反復型です。ニュートン法、共役勾配など。問題の解に対する反復近似の精度が十分であると確信できる場合は、これらの反復を終了します。つまり、正確なソリューションが得られる前に終了します。以前と同様に、近似のみを計算していることがわかっているのに、反復スキームに正確な算術を使用するのはなぜですか?


認めることはイライラしますが、ええ、あなたの答えは基本的に正確な計算の大規模な使用を十字架につけます。近いうちに背中が見えなくなると思いfloatます。
Milind R 2013

@MilindR:あなたが何を目指しているのかよくわかりません。あなたはハンマーを持っているようで、誰も釘を持っていないか、ハンマーが便利なツールだと思っていることに不満を感じています。しかし、それは私たちがあなたを好きではないからではありません-私たちは長い間これらの問題について考え、私たちが持っているドライバーが適切なツールであると単に決めました。それは実用的なアプローチなので、私はそれについてイライラすることはありません(ハンマーがない限り)-近似のみを行うときに正確な算術を使用するのはなぜですか?
Wolfgang Bangerth 2013年

完全に正常な問題は条件が悪く、事実上不溶性である可能性があるため、イライラします。また、値を格納してから出力するまでの浮動小数点の不正確な性質と比較して、任意精度の理想が非常に有望に見えたためです。
Milind R 2013

問題は、丸め誤差の分析が非常に難しいことです。数値解析と数値線形代数を学び始めたその日に気づきました。それで、問題を完全に回避し、調整を問題のないシステムにすることは、世界を嵐のようにするべきでしょうか?と思いました。もちろん、私は制限を理解していますが、取引ブレーカーというよりは刺激のように見えました。プロセッサのトランジスタを縮小するのが難しくなるようなものです。はい、分析するのは難しいですが、インテルはまだ分析します。
Milind R 2013

1
問題が非常に条件が悪いために解決することが難しい場合、その解は摂動に対して安定しません。これは、浮動小数点表現ではなく、元の問題の問題です。はい、多分あなたは正確な表現を使用して問題の解決策を得ることができます。しかし、ソリューションは安定していないため、実際に探しているものとは何の関係もないでしょう。数値の表現に問題があると思われる場合、間違ったツリーを表示しています。
Wolfgang Bangerth 2013年

3

正しい丸めのためにこのライブラリーCRlibmを見ると、一般に、アルゴリズムは正確であることが証明されなければならない(正当な証明がある)ことがドキュメントに表示されます。どうして?関数の結果の安定性と収束の速度には、「万能」の答えはありません。要するに、「無料の昼食はありません」-あなたの推論が正しいことを証明するために努力しなければなりません。これは、基礎となるハードウェアではなく、モデル化されている関数の動作によるものです(整数ユニットまたは浮動小数点ユニットのどちらを使用するかにかかわらず、どちらも、オーバーフロー/アンダーフロー、非正規数などの「問題」があります)。整数への収束を探している場合、結果を見つけるために使用されるアルゴリズムは必ずしも非常に安定しているとは限りません。

Eigenは、それぞれ異なるプロパティを持つ行列を解くためのさまざまなアルゴリズムを備えたC ++ライブラリです。 このページには、行列の解決に使用されるさまざまなアルゴリズムの速度と精度のトレードオフについて説明する表が含まれています。アイゲン図書館はあなたが望むことをできると思います。:-)


ありがとう..非常に有益で、素晴らしいリンク。しかし、固定小数点を使用して丸めの範囲を制限すると、より正確な出力が得られますか?浮動小数点とは異なり、表現自体は最初から正確なので?
Milind R 2013

1
別の観点から問題を攻撃することをお勧めします。ロジックの概要では、問題のソリューションには、定義、推論、結論/結果の3つの部分があることがわかります。おそらく(私たちのほとんどが)問題解決の「定義」ステップに主に取り組むことに非常に慣れています。通常、問題を「定義」することができます。ただし、イライラした場合、「推論」の部分でより多くの作業を必要とする、より難しいタイプの問題が発生することがあります。
mda 2013

私は漠然とあなたを理解しているだけです...この問題をどこに「定義する」ことができるかわかりません。推論は不可欠です。
Milind R 2013

数年後、私は実際にあなたを理解します:-)
Milind R '06 /

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