浮動小数点比較の異常
浮動小数点比較の概念は、特に float データ型を扱う場合に誤解を招く可能性があります。次の例を考えてみましょう。
int main() { float a = 0.7; float b = 0.5; if (a < 0.7) { if (b < 0.5) printf("2 are right"); else printf("1 is right"); } else printf("0 are right"); }
初期条件が false であるため、直感的には、このコードは「0 が正しい」と出力すると思われるかもしれません。しかし、驚くべきことに、実際の出力は「1 が正しい」です。
説明
説明は浮動小数点数の内部表現にあります。 C では、比較中に float は double に昇格され、double は float よりも正確です。その結果、float の 0.7 は double の 0.7 とまったく同じではありません。 0.7 (float として) が double に昇格すると、0.7 (double として) よりわずかに小さくなります。
一方、0.5 (float として) は double での正確な表現となります。精度。したがって、条件 b
解決策
この問題を解決するには、次のいずれかを実行できます。
これらの解決策のいずれかを実装することで、「0 が正しい」という目的の出力を得ることができます。
以上がC での浮動小数点比較で予期しない結果が生じることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。