PHP で浮動小数点数を比較する場合、表現と精度の微妙な違いを処理することが不可欠です。次のコードに示すように、これは困難な場合があります。
<?php $a = 0.17; $b = 1 - 0.83; // 0.17 if ($a == $b) { echo 'a and b are same'; } else { echo 'a and b are not same'; } ?>
このコードでは、$a と $b が同じ値を表すため、if 条件が true であると期待できます。ただし、予想外に false と評価され、$a と $b が等しくないことが示されます。
この不一致の理由は、浮動小数点数の内部表現にあります。コンピューターで。これらの数値は近似値であり、精度には限界があります。浮動小数点計算を実行すると、小さな丸め誤差が蓄積し、等しいかどうかを比較するときに予期しない結果が生じる可能性があります。
この問題に対処するには、厳密な等価演算子 (==) は、それらが同じ値を表していると確信できる場合を除きます。代わりに、abs() 関数を使用して、2 つの値の絶対差を許容可能な小さな許容誤差と比較します。
たとえば、次のコードを使用して、許容誤差 0.00001 で $a と $b を比較できます。 :
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; } else { echo "a and b are not same"; }
このメソッドは、実用的な目的で浮動小数点を比較するためのより信頼性の高い方法を提供します。
以上がPHP での浮動小数点比較が失敗する場合があるのはなぜですか?また、浮動小数点比較を正しく比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。