Double および Float データ型を比較すると予期しない結果が発生する
倍精度浮動小数点数 (double) と単精度浮動小数点数を比較する場合数値 (浮動小数点数) の場合、予期しない結果が発生する可能性があります。具体的には、float 変数 f と double 変数 d の間の等価性チェック (f == d) は、両方の値が同一に見えても false を返すことがあります。
この動作は、float 変数に関連する 2 つの基本的な要因に起因します。ポイント数: 精度と丸め。
精度と丸め誤差
等価性チェックの意味
浮動小数点数に固有の精度と丸め -ポイント番号は、特に互いに非常に近い値を比較する場合に、丸め誤差を引き起こす可能性があります。これらのエラーが蓄積すると、等価比較が失敗します。このため、浮動小数点数の直接の等価性チェックは信頼性が低く、偽陰性が発生しやすくなります。
解決策: Epsilon と比較
等価性チェックを使用する代わりに、より信頼性の高い浮動小数点数を比較する方法は、浮動小数点数間の絶対差を取得し、それがイプシロン (ε) として知られる小さな値を下回っているかどうかを確認することです。これにより、丸め誤差を考慮し、その差がアプリケーションにとって重要かどうかを判断できます。
if (abs(x - y) < epsilon)
以上が「float」値と「double」値を比較すると、同一に見える場合でも「false」が返される場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。