ホームページ > バックエンド開発 > PHPチュートリアル > PHP では浮動小数点数の直接比較が機能しないのはなぜですか?また、それらを確実に比較するにはどうすればよいですか?

PHP では浮動小数点数の直接比較が機能しないのはなぜですか?また、それらを確実に比較するにはどうすればよいですか?

DDD
リリース: 2025-01-03 14:27:40
オリジナル
905 人が閲覧しました

Why Doesn't Direct Float Comparison Work in PHP, and How Can We Compare Them Reliably?

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 は同じ数値 (0.17) を表しますが、== を使用した比較では次の結果が返されます。その他の結果条件。

解決策

厳密な比較 (==) を使用した浮動小数点の等しいかどうかの比較は、浮動小数点の不精度のため信頼性がありません。この問題に対処するには、比較に許容可能な差のしきい値を使用することを検討してください。例:

if (abs(($a - $b) / $b) < 0.00001) {
  echo "a and b are same";
}
ログイン後にコピー

このコードでは、関数 abs() は $a と $b の差の絶対値を取得し、その結果を $b で除算します。比較は、浮動小数点の不正確さを考慮して小さなしきい値に対して行われます。

警告

このアプローチは浮動小数点の等価比較に合理的な解決策を提供しますが、浮動小数点値は本質的に不正確であり、正確な等価性が常に正確に表現されるとは限らないことを覚えておくことが重要です。

以上がPHP では浮動小数点数の直接比較が機能しないのはなぜですか?また、それらを確実に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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