ホームページ > バックエンド開発 > C++ > C で `pow(10, 5)` が 9999 を返す場合があるのはなぜですか?

C で `pow(10, 5)` が 9999 を返す場合があるのはなぜですか?

DDD
リリース: 2025-01-01 08:33:10
オリジナル
948 人が閲覧しました

Why Does `pow(10, 5)` Sometimes Return 9999 in C  ?

C で pow(10,5) が 9,999 に等しい理由

C では、 pow(10, 5) を使用して 10 の 5 乗を計算できます。場合によっては、予期しない値 9,999 が発生することがあります。次のコード スニペットに示すように、この動作は一貫性がなく、混乱を招く可能性があります:

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 の pow(10.0, 5) の浮動小数点表現にあります。この計算結果を倍精度浮動小数点変数に格納する場合、小数部分が含まれる場合があります。これを整数変数に代入すると、小数部分が切り捨てられるため、実際の答えよりわずかに小さい値が得られます。この場合、pow(10.0, 5) は内部的に 9999.9999999 として表される可能性がありますが、整数に割り当てられると 9999 に切り捨てられます。

解決策

この問題を回避するには、次の代替案:

  • の結果を指定します倍精度浮動小数点値としての pow: double i = pow(sections, 5 - t - 1);.
  • round 関数を使用して pow の結果を最も近い整数に丸めます: int i =round (pow(sections, 5 - t - 1));.
  • long double やquad など、より正確な浮動小数点表現を使用します。ダブル。

以上がC で `pow(10, 5)` が 9999 を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート