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

Bagaimana untuk Mengelakkan Ralat Ketepatan Titik Terapung di Java?

Susan Sarandon
Lepaskan: 2024-11-17 19:16:01
asal
221 orang telah melayarinya

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);
Salin selepas log masuk

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
Salin selepas log masuk

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);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan