Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dalam Java dengan Selamat untuk Mengelakkan Ralat Ketepatan?

Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dalam Java dengan Selamat untuk Mengelakkan Ralat Ketepatan?

Mary-Kate Olsen
Lepaskan: 2024-12-30 19:52:10
asal
676 orang telah melayarinya

How Can I Safely Compare Double Values in Java to Avoid Precision Errors?

Bahaya Ketepatan Perbandingan Berganda di Jawa dan Penyelesaiannya

Membandingkan nilai berganda di Jawa boleh menjadi tugas yang mengelirukan. Perbandingan naif, seperti yang digambarkan di bawah, mungkin menghasilkan keputusan yang tidak dijangka disebabkan oleh pengehadan ketepatan titik terapung:

double a = 1.000001;
double b = 0.000001;

if ((a-b) == 1.0) {
  // This condition evaluates to false, though it seemingly should be true.
}
Salin selepas log masuk

Isu timbul kerana penolakan a-b tidak mengembalikan tepat 1.0, tetapi nilai yang sangat hampir dengannya. Aritmetik titik terapung boleh memperkenalkan ralat pembundaran, menghasilkan nilai 0.9999999999999999, yang tidak bersamaan dengan 1.0.

Untuk mengelakkan perangkap ini, adalah disyorkan untuk menggunakan perbandingan anggaran dan bukannya perbandingan yang tepat. Kaedah Math.abs() boleh digunakan untuk mengira perbezaan mutlak antara hasil sebenar dan nilai yang dijangkakan, dan perbezaan ini boleh dibandingkan dengan nilai toleransi yang kecil:

double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {
  // This condition evaluates to true, as the absolute difference is small enough.
}
Salin selepas log masuk

Dengan menetapkan toleransi yang sesuai nilai, anda boleh mengawal tahap ketepatan yang boleh diterima untuk perbandingan. Pendekatan ini membolehkan anda mengendalikan had ketepatan titik terapung dengan berkesan dan memastikan penilaian yang tepat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Nilai Berganda dalam Java dengan Selamat untuk Mengelakkan Ralat Ketepatan?. 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