Rumah >Java >javaTutorial >Bagaimana untuk Mengelakkan Ralat Ketepatan Titik Terapung di Java?

Bagaimana untuk Mengelakkan Ralat Ketepatan Titik Terapung di Java?

Susan Sarandon
Susan Sarandonasal
2024-11-17 19:16:01283semak imbas

How to Avoid Floating-Point Precision Errors in Java?

Mengelakkan Ralat Ketepatan Titik Terapung dengan Terapung dan Beregu di Jawa

Di Jawa, operasi yang melibatkan nombor titik terapung (terapung dan berganda) boleh membawa kepada ralat ketepatan. Ralat ini timbul kerana apungan dan gandaan mewakili nombor dalam bentuk binari, yang tidak memberikan perwakilan tepat untuk semua nilai perpuluhan.

Pertimbangkan kod berikut:

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

Sebaliknya daripada nilai yang dijangkakan, output memaparkan kenaikan 0.1 dengan sedikit peningkatan ralat:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

Mengatasi Ralat Ketepatan

Untuk mengelakkan isu ini, pertimbangkan pendekatan berikut:

  • Gunakan Toleransi dalam Perbandingan: Apabila membandingkan apungan atau gandaan untuk kesamaan, benarkan toleransi yang kecil sama ada cara untuk mengambil kira kemungkinan ralat ketepatan.
  • Gunakan BigDecimal: Sebagai alternatif, gunakan kelas BigDecimal, yang menyediakan perwakilan perpuluhan tepat bagi nombor. Berikut ialah contoh:
BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
     value.compareTo(BigDecimal.ONE) < 0;
     value = value.add(step)) {
    System.out.println(value);
}

Kod ini akan mewakili dan menambah nilai dengan tepat sebanyak 0.1, mengelakkan pengumpulan ralat ketepatan.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat Ketepatan Titik Terapung di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn