Double と Float を比較すると予期しない結果が発生する
同じ値 1.1 を持つ float 変数 f と double 変数 d を比較すると、驚くべき結果が返されます。間違い。この予期しない結果は、浮動小数点数の基本的な特性に起因します。
浮動小数点数の精度と丸め
浮動小数点数 (float 型と double 型を含む)には固有の制限があります:
精度: 浮動小数点数は有効桁数の有限制限内の実数を表します。データ型が処理できるよりも高い精度が必要な値は、切り捨てられた表現になります。
丸め: 2 進数は、常に正確な 10 進数表現を持つとは限りません。 2 進数を 10 進数に変換する場合、浮動小数点型の限られた精度に合わせて丸めが行われます。
比較への影響
これらの要因により、float 値と double 値は丸め誤差が生じる可能性があります。これらのエラーは、等しいはずの 2 つの数値を比較するときに不一致を引き起こす可能性があります。指定された例では、1.1 の float 表現と double 表現には丸めによりわずかな変動があり、結果として f != d という直感に反する結果が生じます。
ベスト プラクティス
浮動小数点数間の直接の等価比較は避けてください。代わりに、値間の絶対的な差を評価し、それを許容可能なしきい値 (イプシロン) と比較することを選択します。
if (abs(x - y) < epsilon) { ... }
このアプローチは、浮動小数点演算に固有の誤差を考慮し、より信頼性の高い方法を提供します。 2 つの値が本質的に等しいかどうかを判断します。
以上が同じ値の float と double を比較すると false が返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。