Rumah > Java > javaTutorial > Mengapa Menggunakan `==` untuk Membandingkan Nombor Titik Terapung dalam Java Bermasalah?

Mengapa Menggunakan `==` untuk Membandingkan Nombor Titik Terapung dalam Java Bermasalah?

Barbara Streisand
Lepaskan: 2024-12-24 20:41:10
asal
455 orang telah melayarinya

Why Is Using `==` to Compare Floating-Point Numbers in Java Problematic?

Membandingkan Nilai Titik Terapung: Perangkap Kesaksamaan dalam Java

Walaupun dokumentasi Java menunjukkan bahawa == berfungsi sebagai pengendali kesamaan untuk terapung- nombor mata, menggunakannya untuk perbandingan boleh menimbulkan kebimbangan. Seperti yang digambarkan oleh contoh:

if(sectionID == currentSectionID)
Salin selepas log masuk

menyebut analisis statik mencetuskan ralat, "JAVA0078 Nilai titik terapung berbanding dengan ==". Sebabnya terletak pada batasan yang wujud bagi perwakilan titik terapung binari.

Membandingkan nilai titik terapung dengan == adalah serupa dengan membandingkan epal dengan oren. Oleh kerana nilai ini adalah anggaran dan bukannya perwakilan tepat, malah nilai yang sama mungkin menghasilkan perwakilan binari yang berbeza. Akibatnya, == menyemak kandungan alamat memori pembolehubah dan bukan nilai titik terapung yang mendasari.

Pendekatan yang Betul

Untuk menangani isu ini, pendekatan yang disyorkan ialah membandingkan nilai titik terapung berdasarkan ambang toleransi. Ujian 'kesamaan' menjadi:

if(Math.abs(sectionID - currentSectionID) < epsilon)
Salin selepas log masuk

di mana epsilon mewakili nombor kecil seperti 0.00000001, disesuaikan dengan tahap ketepatan yang diingini. Kaedah ini menilai sama ada perbezaan mutlak antara dua nilai titik terapung adalah kurang daripada epsilon ambang. Jika ya, mereka dianggap 'sama' dalam toleransi yang ditentukan.

Kesimpulannya

Walaupun operator == menyediakan cara yang mudah untuk membandingkan nilai titik terapung, kekurangannya memerlukan berhati-hati. Untuk mengelakkan ketidaktepatan dan perbandingan yang tidak boleh dipercayai, amalan pilihan adalah memanfaatkan pendekatan berasaskan toleransi yang disebutkan di atas, memastikan ketepatan dan kebolehpercayaan dalam perbandingan titik terapung.

Atas ialah kandungan terperinci Mengapa Menggunakan `==` untuk Membandingkan Nombor Titik Terapung dalam Java Bermasalah?. 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