ホームページ >Java >&#&チュートリアル >精度エラーを避けるために Java で Double 値を安全に比較するにはどうすればよいですか?

精度エラーを避けるために Java で Double 値を安全に比較するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-30 19:52:10676ブラウズ

How Can I Safely Compare Double Values in Java to Avoid Precision Errors?

Java での Double 比較の精度の危険性とその解決策

Java での Double 値の比較は、欺瞞的な作業になる可能性があります。以下に示すように、単純な比較では、浮動小数点精度の制限により予期しない結果が生じる可能性があります。

double a = 1.000001;
double b = 0.000001;

if ((a-b) == 1.0) {
  // This condition evaluates to false, though it seemingly should be true.
}

この問題は、a-b の減算が正確に 1.0 を返さず、それに非常に近い値を返すために発生します。浮動小数点演算では丸め誤差が発生する可能性があり、その結果、値は 0.9999999999999999 となり、1.0 に等しくなりません。

この落とし穴を回避するには、正確な比較ではなく近似比較を使用することをお勧めします。 Math.abs() メソッドを使用して、実際の結果と期待値の間の絶対差を計算でき、この差を小さな許容値と比較できます。

double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {
  // This condition evaluates to true, as the absolute difference is small enough.
}

適切な許容値を設定することにより、値を使用して、比較に許容される精度のレベルを制御できます。このアプローチにより、浮動小数点の精度制限を効果的に処理し、正確な評価を保証できます。

以上が精度エラーを避けるために Java で Double 値を安全に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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