Rumah > Java > javaTutorial > Bagaimana untuk Membandingkan Nilai Berganda dalam Java dan Mengelakkan Ralat Ketepatan?

Bagaimana untuk Membandingkan Nilai Berganda dalam Java dan Mengelakkan Ralat Ketepatan?

Linda Hamilton
Lepaskan: 2024-12-10 20:45:11
asal
590 orang telah melayarinya

How to Reliably Compare Double Values in Java and Avoid Precision Errors?

Perbandingan Nilai Berganda dalam Java: Menangani Ralat Ketepatan

Membandingkan nilai berganda dalam Java boleh menjadi tugas yang sukar disebabkan kemungkinan ralat ketepatan. Perbandingan mudah, seperti yang ditunjukkan di bawah, mungkin membawa kepada hasil yang tidak dijangka:

double a = 1.000001;
double b = 0.000001;

boolean result = (a - b == 1.0); // False
Salin selepas log masuk

Kod ini mencetak palsu kerana operasi tolak menghasilkan 0.9999999999999999, yang tidak sama dengan 1.0. Untuk mengatasi isu ini, kita memerlukan kaedah perbandingan yang lebih tepat.

Salah satu pendekatan ialah mengira perbezaan mutlak antara kedua-dua nilai dan membandingkannya dengan nilai toleransi yang kecil. Contohnya:

double c = Math.abs(a - b - 1.0);
boolean result = (c <= 0.000001); // True
Salin selepas log masuk

Kod ini memperkenalkan toleransi 0.000001, jadi selagi perbezaan mutlak antara c dan 1.0 berada dalam julat ini, perbandingan akan dinilai kepada benar. Kaedah Math.abs() memastikan bahawa nilai mutlak dipertimbangkan, tanpa mengambil kira sebarang perbezaan tanda.

Dengan menggunakan teknik ini, kita boleh mengambil kira kemungkinan ralat ketepatan dan melakukan perbandingan nilai berganda yang boleh dipercayai. Pendekatan ini amat berguna apabila bekerja dengan data titik terapung, di mana perbandingan kesaksamaan yang tepat tidak selalunya praktikal.

Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Nilai Berganda dalam Java dan 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