倍精度変数で整数の除算が驚くべきゼロを生成する
単純な除算 (3/5) を計算しようとすると、予期しない結果が発生する可能性があります。結果を倍精度変数に格納しているにもかかわらず、結果が不規則にゼロとして表示される場合があります。この謎を解明するために、基礎となるメカニズムを調べてみましょう:
提供されたコード スニペットでは、被除数 (3) と除数 (5) は両方とも整数です。デフォルトでは、C はこの除算を整数の除算として解釈し、結果を切り捨てて小数部分を切り捨てます。この場合、整数の除算で予想されるように、3 を 5 で割ると 0 が得られます。
この問題を修正して目的の浮動小数点除算を行うには、オペランドの少なくとも 1 つが次のように表されることを確認する必要があります。実数。これは、除数または被除数に「.0」を追加することで実現できます。
double f = 3.0 / 5; // Explicitly making the dividend a real number // or double f = 3 / 5.0; // Explicitly making the divisor a real number
オペランドの 1 つを実数に変換することで、コンパイラに浮動小数点除算を強制的に実行させます。これにより、小数部分が確実に保持され、正しい結果 (この場合は 0.6) が f 変数に格納されます。
以上がC の整数除算を double 変数に格納すると結果がゼロになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。