9

私のプロジェクトでは、double要素の行列で除算、乗算、減算、加算を計算する必要があります。問題は、行列のサイズが大きくなると、出力の精度が大幅に影響を受けることです。現在、メモリdoubleを使用していると思われる要素ごとに使用しており、小数点以下の桁数8 bytesに関係なく精度があります16 digits。マトリックスのサイズが大きい場合でも、すべての要素が占めるメモリは数キロバイトの範囲です。datatypesだから私はより多くのメモリを必要とするものを使う余裕があります。そのため、どのデータ型がより正確であるかを知りたいと思いましたdouble。いくつかの本を検索してみましたが、見つけることができlong doubleました。しかし、私はその精度が何であるかわかりません。そして、それよりも高い精度が必要な場合はどうなりますか?

4

4 に答える 4

10

Wikipediaによると、80ビットの「Intel」IEEE 754拡張精度 long doubleは、メモリ内の16ビットに80ビットが埋め込まれ、64ビットの仮数を持ち、暗黙のビットがないため、10進数で19.26桁になります。これは昔からほぼ普遍的な基準でしlong doubleたが、最近では状況が変わり始めています。

新しい128ビットの四倍精度形式には、112の仮数ビットと、34桁の10進数を取得する暗黙のビットがあります。GCCはこれを__float128型として実装し、(メモリが機能する場合は)それに設定するコンパイラオプションがありますlong double

于 2013-03-27T13:28:04.257 に答える
7

操作のシーケンスを検討することをお勧めします。つまり、最小値から順に追加を実行します。これにより、仮数で同じ精度を使用して、結果の全体的な精度が向上します。

1e00 + 1e-16 + ... + 1e-16 (1e16 times) = 1e00
1e-16 + ... + 1e-16 (1e16 times) + 1e00 = 2e00

重要なのは、大きな数に小さな数を追加すると、それらが消えるということです。したがって、後者のアプローチは数値誤差を減らします

于 2013-03-27T15:10:22.670 に答える
3

doubleコンパイラとアーキテクチャに依存するよりも高い精度の浮動小数点データ型。

精度以上のものを取得するにdoubleは、任意精度の計算をサポートする数学ライブラリに依存する必要がある場合があります。しかし、これらはおそらく速くはないでしょう。

于 2013-03-27T13:16:58.907 に答える
0

Intelアーキテクチャでは、の精度long double80ビットです。

どんな価値観を表現したいですか?たぶん、固定精度を使用したほうがよいでしょう。

于 2013-03-27T13:21:38.723 に答える