0

重要な挙動を持つシステムを説明する物理シミュレーションをコーディングしています。これは、このレジームでのその特性が外部パラメーターに非常に急激に依存していることを意味します (たとえば、水は 100°C のすぐ下の液体で、すぐ上の気体です)。私は現在の結果に満足しておらず、変数の精度に疑問を持っています。これまで double を使用してきましたが、期待できる精度についてはわかりません。たとえば、次のようになります。

long double K = 0.274653072;
cout << K << endl;

float K = 0.274653072;
cout << K << endl;

同じ出力 (0.274653) が得られます。これは、cout 演算子のパラメーターが特定の桁数の後に切断したためですか、それとも保存時に 3 の後にすべてを本当に失ったのでしょうか? 10^{-8} または 10^{-9} までの精度で最高の効率が必要な場合、どの変数を使用すればよいですか? (これが重要な場合は、計算に指数を使用しています)

4

4 に答える 4

2

どの変数を使用してもかまいません。違いは、その変数を出力するときです。printf精度を高めるために使用します。例: printf("%.3f\n", K). %ffloat と%lfdouble に使用されます。%.3f上記の例では、出力が最大 3 桁の精度を持つ float であることを意味します。

于 2013-10-29T10:10:48.397 に答える
0

適切なツールを選択したと確信していますか? C++ のような言語での科学計算は、重要な技術です。計算が非常にデリケートな場合は、Matlab、R などの専用ツールを検討する必要があります。または、少なくとも C/C++ 専用のライブラリを使用してください。「素朴な」方法で一連の計算で数式をプログラミングすると、重大な累積エラーが発生する可能性があります。この主題について書かれた本全体があります。

于 2013-10-29T10:26:08.767 に答える