首頁 > Java > java教程 > 主體

如何避免 Java 中的浮點精度錯誤?

Susan Sarandon
發布: 2024-11-17 19:16:01
原創
133 人瀏覽過

How to Avoid Floating-Point Precision Errors in Java?

避免Java 中浮點數和雙精度數的浮點精度錯誤

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
登入後複製

解決精確度錯誤

要避免此問題,請考慮以下方法:

  • 在比較中使用容差:比較浮點數或雙當精度數是否相等時,允許無論哪種方式,都需要有一個小公差,以考慮潛在的精度誤差。
  • 使用BigDecimal: 或者,使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板