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 サイトの他の関連記事を参照してください。