ホームページ  >  記事  >  バックエンド開発  >  PHP Float 比較が成功するはずなのに失敗するのはなぜですか?

PHP Float 比較が成功するはずなのに失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 00:32:28499ブラウズ

Why Does My PHP Float Comparison Fail When It Should Succeed?

PHP 浮動小数点計算の精度の難題

プログラミングにおける浮動小数点計算は、その不正確な性質により、多くの場合課題を引き起こす可能性があります。 PHP コード スニペットに示されているように、2 つの浮動小数点数をしきい値と比較しても、必ずしも期待した結果が得られるとは限りません。

問題の定式化:

提供された PHP コードこれには次の操作が含まれます:

  1. $fooValue と $cowValue に特定の float 値を割り当てます。
  2. これらの値の差を計算し、$diffValue に保存します。
  3. $diffValue が 0.01 以下かどうかを確認し、「success」をエコーし​​ます。それ以外の場合は、「error」をエコーし​​ます。

問題は、<= を使用して浮動小数点数としきい値を比較することにあります。この場合、差が実質的にゼロであるにもかかわらず、コードは「エラー」を出力するという予期しない動作を示します。

解決策の説明:

浮動小数点計算の不正確さが原因です。 10 進数から 2 進数への変換、またはその逆の変換中に精度が失われる可能性があります。そのため、== または <= を使用した比較では、厳密な等価性が必要ですが、常に正確な結果が得られるとは限りません。

この問題を解決するには、次のような代替アプローチが必要です。

  • BC 数学ライブラリ: より高精度の浮動小数点演算のための特定の関数を提供します。
  • GMP ライブラリ: 計算に整数を使用するため、浮動小数点の不正確さの可能性が排除されます。ただし、整数と浮動小数点間の変換が必要なため、精度が低下する可能性があります。

これらのライブラリを利用することで、プログラマーは浮動小数点計算に固有の不正確さを軽減し、より正確な比較を実現できます。

以上がPHP Float 比較が成功するはずなのに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。