ホームページ >バックエンド開発 >C++ >C の `pow` 関数を使用する場合、浮動小数点の精度は整数の結果にどのような影響を与えますか?

C の `pow` 関数を使用する場合、浮動小数点の精度は整数の結果にどのような影響を与えますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 19:27:14822ブラウズ

How Does Floating-Point Precision Affect Integer Results When Using the C   `pow` Function?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。