6

C99にはdouble_tがあり、少なくともdoubleと同じ幅でなければならないことを読んだところです。これは、小数点以下の桁数がより正確になることを意味しますか? double? の通常の 15 桁以上。

第二に、それを使用する方法: 含まれているだけです

#include <float.h> 

足りる?long double の場合は FLT_EVAL_METHOD を 2 に設定する必要があることを読みました。これを行う方法?私は数値的手法を扱っているので、任意精度のライブラリを使用せずに最大の精度が必要です。

どうもありがとう...

4

3 に答える 3

5

No. double_t少なくとも2 倍の幅です。つまり、double と同じかもしれません。C99 標準の脚注 190 は、その意図を明確にしています。

型 float_t および double_t は、少なくともそれぞれ float および double と同じ幅の実装の最も効率的な型であることを意図しています。

Michael Burr が指摘したように、 を設定することはできませんFLT_EVAL_METHOD

C99 のみを使用して利用可能なシステムで最も広い浮動小数点型が必要な場合は、 を使用しますlong double。一部のプラットフォームでは と同じになることに注意してくださいdouble(さらには と同じになることもありますfloat)。

また、「数値メソッドを使用する」場合、多くの (ほとんどの) 数値メソッドでは、メソッドの近似誤差が倍精度の丸め誤差よりもはるかに大きいことに注意する必要があります。種類。もちろん、例外は存在します。具体的には、どのような数値手法に取り組んでいますか?

編集:真剣に、(a)単に使用long doubleして1日と呼ぶか、(b)ターゲットにしているプラ​​ットフォームで浮動小数点が実際にどのように実装されているか、および実際の精度要件が何であるかを学ぶのに数週間かかります実装しているアルゴリズム。

于 2010-04-16T18:17:18.867 に答える
1

設定する必要はないことに注意してくださいFLT_EVAL_METHOD。ライブラリが浮動小数点で特定のことを行う方法を決定できるようにするために、コンパイラのヘッダーによって設定されます。

コードが浮動小数点演算の正確な実行方法に非常に敏感な場合は、そのマクロの値を使用してコードを条件付きでコンパイルし、重要な違いを処理できます。

したがって、たとえば、一般に、それはすべての場合double_tに少なくとも a になることがわかっています。doubleコードで if が何か違うことをしたい場合double_tは、long doubleコードで if をテストし、FLT_EVAL_METHOD == 2 それに応じて動作させることができます。

FLT_EVAL_METHODifが 0、1、または 2 以外であることに注意してください。型double_tが何であるかを正確に知るには、コンパイラのドキュメントを参照する必要があります。

于 2010-04-16T18:13:57.033 に答える
0

double_tもちろん、実装の詳細に依存する予定がある場合typedef double double_t;は、独自の実装を確認する必要があります。

于 2010-04-16T18:17:56.143 に答える