Java での浮動小数点精度エラーを回避するには?

Susan Sarandon
リリース: 2024-11-17 19:16:01
オリジナル
133 人が閲覧しました

How to Avoid Floating-Point Precision Errors in Java?

Java の Float および Double での浮動小数点精度エラーの回避

Java では、浮動小数点数 (float および double) を含む演算精度誤差が生じる可能性があります。これらのエラーは、float と double がバイナリ形式で数値を表し、すべての 10 進数値を正確に表現できないために発生します。

次のコードを検討してください。

for (float value = 0.0f; value < 1.0f; value += 0.1f)
    System.out.println(value);
ログイン後にコピー

期待される値の代わりに、出力には、エラーがわずかに蓄積されて 0.1 ずつ増分が表示されます。

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
ログイン後にコピー

精度エラーへの対処

この問題を回避するには、次のアプローチを検討してください。

  • 比較で許容誤差を使用する: float または double が等しいかどうかを比較する場合、潜在的な精度誤差を考慮して、いずれの場合も小さい許容誤差を考慮してください。
  • BigDecimal を使用します: あるいは、数値の正確な 10 進表現を提供する BigDecimal クラスを利用します。以下に例を示します。
BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
     value.compareTo(BigDecimal.ONE) < 0;
     value = value.add(step)) {
    System.out.println(value);
}
ログイン後にコピー

このコードは、値を正確に表し、0.1 ずつ増分し、精度誤差の蓄積を回避します。

以上がJava での浮動小数点精度エラーを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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