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

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

Patricia Arquette
リリース: 2024-12-27 21:07:16
オリジナル
194 人が閲覧しました

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

C で pow(10,5) が 10,000 ではなく 9,999 を表示する理由

C で pow() 関数を整数で使用すると入力と浮動小数点指数では、浮動小数点値の表現が原因で予期しない結果が発生する可能性があります。具体的には、pow(10.0, 5) の値は 9999.9999999 などになる可能性があります。この浮動小数点値が整変数に割り当てられると、切り捨てられます。

たとえば、次のコード スニペットを考えてみましょう。

const int sections = 10;

for(int t = 0; t < 5; t++){
   int i = pow(sections, 5- t -1);  // <-- pow() with integer base, floating-point exponent
   cout << i << endl;
}
ログイン後にコピー

このコードの出力は、誤って表示されます。

9999
1000
99
10
1
ログイン後にコピー

ただし、pow() 関数を cout ステートメント内で直接使用するようにコードが変更された場合、期待される結果は次のようになります。取得:

for(int t = 0; t < 5; t++){
    cout << pow(sections,5-t-1) << endl; // <-- pow() used directly in cout
}
ログイン後にコピー

この変更により、出力は正しく表示されます:

10000
1000
100
10
1
ログイン後にコピー

この矛盾が発生するのは、最初の例では pow(sections, 5) の浮動小数点の結果が- t -1) は、整変数に代入されると切り捨てられます。ただし、2 番目の例では、浮動小数点の結果が cout に直接渡されるときに丸められ、正しい表示が得られます。

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

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