C における浮動小数点の精度と切り捨て
C では、 pow 関数は 2 つの倍精度浮動小数点値を入力として受け取り、倍精度浮動小数点の結果を返します。ただし、大きな指数値を扱う場合、浮動小数点精度により予期しない結果が生じる可能性があります。
pow(10,5) の問題
次の点を考慮してください。 code:
const int sections = 10; for (int t = 0; t < 5; t++) { int i = pow(sections, 5 - t - 1); cout << i << endl; }
このコードの予想される出力は:
10000 1000 100 10 1
ただし、コードを実行すると、次のような間違った出力が発生する可能性があります:
9999 1000 99 10 1
問題の理解
この不一致は、浮動小数点精度の制限により発生します。 C では、倍精度浮動小数点値の有効桁数は限られています (10 進数で約 15 ~ 17 桁)。 pow(10,5) が計算されると、結果は大きな浮動小数点値 (100000.0) になります。ただし、この値を整数変数 (i など) に代入すると、小数部分は切り捨てられます。したがって、 i の値は 10000 ではなく 9999 になります。
精度の問題の回避
このような精度の問題を回避するには、 pow(10.0, 5) を直接使用できます。 cout ステートメント内。倍精度浮動小数点値として評価され、次の場合に丸められます。印刷:
for (int t = 0; t < 5; t++) { cout << pow(sections, 5-t-1) << endl; }
このコードは正しい出力を生成します:
10000.000000 1000.000000 100.000000 10.000000 1.000000
以上がC の `pow` 関数を使用する場合、浮動小数点の精度は整数の結果にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。