0

C ++で微積分(ガンマ関数の積分)を作成するプロトタイプ関数を取得しました。これをC言語に変換する必要があります。著者は、すべての微積分で接尾辞fが付いたfloat変数を使用しました。これらの文のように...

float a1=.083333333f;
float vv=dif*i/1.414214f;

プログラムは、その変数のいくつかを乗算することにより、多くの行で切り捨てられた系列を利用します。私の質問はそうです...倍精度変数を使用すると、精度が上がりませんか?その場合、なぜ接尾辞が必要になるのでしょうか。前もって感謝します!

4

2 に答える 2

0

倍精度でより高い精度が得られ、C/C++ では特別な接尾辞は必要ありません。したがって、コードは次のようになります

  double a1=.083333333;
  double vv=dif*i/1.414214;

また、必要に応じて、より正確な浮動小数点リテラルを自由に使用できます...さらに「3」を追加し、「1.414214」を心ゆくまで拡張してください。ただし、倍精度でも完全に正確ではないことに注意してください。

于 2011-10-24T20:17:18.083 に答える
0

float, in modern systems, is a 32 bit floating point type. double, in modern systems, is a 64 bit floating point type.

The accuracy of a float is much less than a 64 bit floating point, but is still very useful for speed and because it occupies less bytes of ram.

Now with 64 bit system the difference between float and double are a lot less noticeable, but in the past, they could be really different.

常にパフォーマンスと精度の間のトレードオフを見つけなければなりません: double と float の選択はまさにこれです: 高精度または低精度でより良いパフォーマンスが必要ですか?

通常、3D ゲームでは float を使用し、微積分アプリケーションでは通常 double を使用します。

double の精度があなたに合っているかどうかを確認してください。そうでない場合は、C++ ライブラリで abritrary 精度の数値を検索することをお勧めしますが、パフォーマンスについての議論を続けるために、このオブジェクトのパフォーマンスは、ネイティブの double または float と比較して非常に悪いです.

于 2011-10-24T20:29:31.673 に答える