Perangkap Perbandingan Kesamaan Terapung dengan == di Jawa
Java menyediakan operator == untuk perbandingan kesamaan, termasuk nombor titik terapung. Walau bagaimanapun, menggunakan == untuk membandingkan terapung boleh membawa kepada keputusan yang mengejutkan dan tidak boleh dipercayai.
Bertentangan dengan maklumat yang diberikan pada halaman Java.sun, menggunakan == untuk perbandingan titik terapung boleh mencetuskan amaran analisis statik seperti "JAVA0078 Nilai titik terapung berbanding dengan ==" dalam IDE. Ini kerana nombor titik terapung dalam Java diwakili menggunakan format titik terapung IEEE 754, yang memperkenalkan ketidaktepatan yang wujud.
Disebabkan oleh pengehadan dalam ketepatan titik terapung, nilai titik terapung disimpan sebagai anggaran. Operasi seperti penambahan, penolakan dan perbandingan memperkenalkan ralat pembundaran yang terkumpul dari semasa ke semasa. Akibatnya, perbandingan langsung menggunakan == mungkin mengembalikan palsu walaupun pada asasnya nombornya sama.
Pendekatan Betul: Perbandingan Berasaskan Epsilon
Untuk membandingkan dengan pasti terapung- nilai mata dalam Java, pendekatan yang disyorkan ialah menggunakan perbandingan berasaskan epsilon. Daripada menguji kesamaan tepat menggunakan ==, kami menyemak sama ada perbezaan mutlak antara dua nombor adalah kurang daripada nilai ambang kecil yang dipanggil epsilon.
Coretan kod di bawah menunjukkan cara yang betul untuk membandingkan apungan:
if (Math.abs(sectionID - currentSectionID) < epsilon)
Di sini, epsilon ialah nombor yang sangat kecil yang telah ditetapkan (mis., 0.00000001) yang mentakrifkan julat sisihan yang boleh diterima untuk kesaksamaan. Pendekatan ini dengan berkesan membolehkan margin ralat yang kecil disebabkan oleh ketidaktepatan titik terapung, memastikan pemeriksaan kesaksamaan yang boleh dipercayai.
Atas ialah kandungan terperinci Mengapa menggunakan `==` untuk perbandingan kesamaan apungan di Jawa tidak boleh dipercayai dan apakah pendekatan yang betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!