浮動小数点比較の混乱
指定されたコード スニペットでは、浮動小数点数間の比較チェックは予想されるほど単純ではありません。 。浮動小数点の比較を扱う場合、浮動小数点の表現と、それによって生じる潜在的な落とし穴を理解することが重要です。
浮動小数点の落とし穴
次の問題コードは浮動小数点数の比較にあります。浮動小数点数は、有限数のビットを使用して大きさと指数の両方を表すバイナリ形式で格納されます。これは、浮動小数点数が特定の値を表す精度に固有の制限があり、丸め誤差が生じることを意味します。
提供されたコードでは、変数 a と b は両方とも浮動小数点数として定義されています。 a と 0.7 を比較する場合、コンパイラは比較のために float を double に昇格します。 a の double 表現が正確に 0.7 に等しくない可能性があるため、この型昇格により精度が失われる可能性があります。さらに、0.5 は正確な 2 の累乗であり、浮動小数点形式で正確に表現できます。
その結果、比較 a < a の double への昇格と 0.7 の不正確な表現により、0.7 は true と評価されます。これは、予期された「0 が正しい」ではなく、「1 が正しい」という予期しない出力を説明しています。
正しい比較を確保する
このような問題を回避するには、次の 2 つがあります。可能なアプローチ:
以上が浮動小数点の比較が不正確になるのはなぜですか?正しい結果を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。