ホームページ > Java > &#&チュートリアル > Java での浮動小数点の直接の等価比較に問題があるのはなぜですか?また浮動小数点を正しく比較するにはどうすればよいですか?

Java での浮動小数点の直接の等価比較に問題があるのはなぜですか?また浮動小数点を正しく比較するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-21 15:42:10
オリジナル
318 人が閲覧しました

Why is Direct Floating-Point Equality Comparison in Java Problematic, and How Can We Correctly Compare Floats?

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

Java 開発者は、等価演算子 (==) を使用して浮動小数点を比較するときに混乱に遭遇することがよくあります。 -ポイント番号。ドキュメントには浮動小数点比較の有効性が記載されているにもかかわらず、静的解析ツールはそのような比較に誤りがあるとフラグを立てます。

Float では == が問題となるのはなぜですか?

浮動小数点数10 進数値を一定レベルの精度でバイナリ形式で表します。この固有の不正確さにより、浮動小数点計算の結果には小さな誤差が含まれる可能性があります。これらのエラーは、等価性チェックで予期しない比較につながる可能性があります。

浮動小数点を比較する正しい方法

浮動小数点の等価性の落とし穴を軽減するには、以下を使用することをお勧めします。代わりに、公差ベースのアプローチを使用します。推奨される解決策は、2 つの浮動小数点間の絶対差が、イプシロンとして知られる事前定義されたしきい値より小さいかどうかをテストすることです。推奨されるコードは次のとおりです。

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

イプシロンは非常に小さな数値で、通常は約 0.00000001 であり、許容可能な不精度レベルを表します。このアプローチでは、浮動小数点計算における軽微なエラーが許容され、正確な等価性チェックが保証されます。この変更された比較を使用すると、Java で浮動小数点の等価性のために == を使用することによる落とし穴を回避できます。

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

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