浮動小数点精度エラー: Java での回避
精度エラーは、プログラミングで float や double などの浮動小数点数を処理するときによく発生します。特に反復的な操作や比較を行う場合に顕著です。この問題を理解するには、次の Java コードを考慮してください:
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
エラーの原因
原因は、コンピュータの浮動小数点システムの小数部の不正確な表現にあります。具体的には、標準ハードウェアでは 0.1 を 2 進浮動小数点数として正確に表すことができません。この結果、わずかな誤差が生じ、それが複数回の反復で増幅され、期待値からの偏差が観測されます。
問題への対処
この精度の問題に対処するには、いくつかのアプローチがあります。雇用される:
1.精度制御
表示目的で、表示される小数点以下の桁数を制限できます。さらに、浮動小数点数が等しいかどうかを比較するときは、潜在的な不正確さを考慮して、小さな許容マージンを考慮してください。
2.代替データ型
浮動小数点数の代替として、正確な算術演算に対応するデータ型を利用することができます。たとえば、Java の 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); }
このコードは正確ですfloat または double で見られる精度エラーなしで、値 0.1 を繰り返しインクリメントして出力します。
結論
浮動小数点数の精度エラーを理解し、軽減することは、浮動小数点数の精度エラーを理解し、軽減することが重要です。 Java プログラミングで正確な結果を保証します。適切な手法を採用することで、開発者はこの制限を克服し、10 進表現であっても正確な算術演算を実現できます。
以上が浮動小数点インクリメントを含む Java ループで不正確な結果が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。