ホームページ > Java > &#&チュートリアル > Java で浮動小数点数を比較するために「==」を使用すると問題があるのはなぜですか?

Java で浮動小数点数を比較するために「==」を使用すると問題があるのはなぜですか?

Barbara Streisand
リリース: 2024-12-24 20:41:10
オリジナル
471 人が閲覧しました

Why Is Using `==` to Compare Floating-Point Numbers in Java Problematic?

浮動小数点値の比較: Java における等価性の落とし穴

Java のドキュメントでは == が浮動小数点の等価演算子として機能することが示されているにもかかわらず、ポイント番号を比較に使用すると、懸念が生じる可能性があります。例に示すように:

if(sectionID == currentSectionID)
ログイン後にコピー

静的分析を呼び出すと、エラー「JAVA0078 浮動小数点値が == と比較されました。」がトリガーされます。その理由は、バイナリ浮動小数点表現の固有の制限にあります。

浮動小数点値を == と比較することは、リンゴとオレンジを比較するのと似ています。これらの値は正確な表現ではなく近似値であるため、同じ値であっても異なるバイナリ表現が生成される場合があります。その結果、== は基になる浮動小数点値ではなく、変数メモリ アドレスの内容をチェックします。

正しいアプローチ

この問題に対処するには、推奨されるアプローチは、許容しきい値に基づいて浮動小数点値を比較することです。 「等しい」テストは次のようになります。

if(Math.abs(sectionID - currentSectionID) < epsilon)
ログイン後にコピー

ここで、イプシロンは、必要な精度レベルに合わせて調整された 0.00000001 のような微小な数を表します。このメソッドは、2 つの浮動小数点値間の絶対差がしきい値イプシロンより小さいかどうかを評価します。そうである場合、それらは指定された許容範囲内で「等しい」とみなされます。

結論

== 演算子は浮動小数点値を比較する簡単な方法を提供しますが、その欠点には注意が必要です。不正確さや信頼性の低い比較を回避するには、前述の許容差ベースのアプローチを活用して、浮動小数点比較の精度と信頼性を確保することをお勧めします。

以上がJava で浮動小数点数を比較するために「==」を使用すると問題があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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