ホームページ  >  記事  >  Java  >  Java での浮動小数点精度エラーを回避する方法: Float、Double、BigDecimal

Java での浮動小数点精度エラーを回避する方法: Float、Double、BigDecimal

Susan Sarandon
Susan Sarandonオリジナル
2024-11-18 04:43:02766ブラウズ

How to Avoid Floating Point Precision Errors in Java: Floats, Doubles, and BigDecimal

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

Java で大量の float または Double を扱う場合、浮動小数点を累積します精度誤差が問題になる可能性があります。このエラーは、float または double が 0.1 などの特定の数値を正確に表現できないために発生します。

次のコードを考えてみましょう:

for (float value = 0.0f; value < 1.0f; value += 0.1f) {
    System.out.println(value);
}

期待される出力:

0.1
0.2
0.3
...
0.9

実際の出力:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

明らかなように、浮動小数点の不正確さにより、出力は期待値から逸脱しています。この問題を解決するには、主に次の 2 つのアプローチがあります。

1.表示精度を調整し許容誤差を許可する

double 型を使用する場合、表示を必要な桁数に制限し、等価性チェックのために小さな許容誤差を導入します。これにより、重大な丸め誤差なしで 0.1 などの数値を表現できるようになります。

2.正確な表現のために BigDecimal を使用する

または、float または double の代わりに BigDecimal を使用することを検討してください。 BigDecimal は、任意の精度で数値を表現する方法を提供し、丸め誤差を排除し、0.1 のような値を正確に表現できるようにします。

以下は 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
0.2
0.3
...
0.9

適切なアプローチを選択することで、開発者は Java で float または double を操作する際の浮動小数点精度エラーを効果的に最小限に抑えたり、排除したりできます。

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

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