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