ホームページ > バックエンド開発 > PHPチュートリアル > PHP での浮動小数点比較が失敗する場合があるのはなぜですか?また、浮動小数点比較を正しく比較するにはどうすればよいですか?

PHP での浮動小数点比較が失敗する場合があるのはなぜですか?また、浮動小数点比較を正しく比較するにはどうすればよいですか?

DDD
リリース: 2024-12-23 16:56:11
オリジナル
701 人が閲覧しました

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

PHP での浮動小数点数の比較

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート