ホームページ >Java >&#&チュートリアル >Java での浮動小数点の直接の等価比較に問題があるのはなぜですか?また浮動小数点を正しく比較するにはどうすればよいですか?
Java における浮動小数点の等価比較の落とし穴
Java 開発者は、等価演算子 (==) を使用して浮動小数点を比較するときに混乱に遭遇することがよくあります。 -ポイント番号。ドキュメントには浮動小数点比較の有効性が記載されているにもかかわらず、静的解析ツールはそのような比較に誤りがあるとフラグを立てます。
Float では == が問題となるのはなぜですか?
浮動小数点数10 進数値を一定レベルの精度でバイナリ形式で表します。この固有の不正確さにより、浮動小数点計算の結果には小さな誤差が含まれる可能性があります。これらのエラーは、等価性チェックで予期しない比較につながる可能性があります。
浮動小数点を比較する正しい方法
浮動小数点の等価性の落とし穴を軽減するには、以下を使用することをお勧めします。代わりに、公差ベースのアプローチを使用します。推奨される解決策は、2 つの浮動小数点間の絶対差が、イプシロンとして知られる事前定義されたしきい値より小さいかどうかをテストすることです。推奨されるコードは次のとおりです。
if(Math.abs(sectionID - currentSectionID) < epsilon)
イプシロンは非常に小さな数値で、通常は約 0.00000001 であり、許容可能な不精度レベルを表します。このアプローチでは、浮動小数点計算における軽微なエラーが許容され、正確な等価性チェックが保証されます。この変更された比較を使用すると、Java で浮動小数点の等価性のために == を使用することによる落とし穴を回避できます。
以上がJava での浮動小数点の直接の等価比較に問題があるのはなぜですか?また浮動小数点を正しく比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。