Rumah >Java >javaTutorial >Mengapa Perbandingan Persamaan Langsung ('==') Bermasalah untuk Terapung di Jawa?

Mengapa Perbandingan Persamaan Langsung ('==') Bermasalah untuk Terapung di Jawa?

DDD
DDDasal
2024-12-23 08:05:44861semak imbas

Why Is Direct Equality Comparison ('==') Problematic for Floats in Java?

Teka-teki Perbandingan Titik Terapung di Jawa

Java menawarkan pengendali perbandingan kesamaan '==' untuk menguji nilai titik terapung, seperti yang didokumenkan di java.sun. Walau bagaimanapun, analisis statik sering menimbulkan kebimbangan mengenai penggunaannya untuk membandingkan apungan.

Perangkap '==' untuk Terapung

Walaupun operator '==' memainkan peranan yang ditetapkan untuk perbandingan apungan, ia terbukti bermasalah kerana ketidaktepatan yang wujud bagi aritmetik titik terapung. Nilai titik terapung diwakili secara dalaman sebagai pengembangan perpuluhan terhingga, memperkenalkan ralat pusingan dan pemotongan semasa pengiraan. Akibatnya, dua nombor titik terapung yang sepatutnya sama secara logik mungkin berbeza dengan jumlah yang kecil. Varians ini boleh membawa kepada positif atau negatif palsu apabila menggunakan '==' untuk menentukan kesamaan.

Pendekatan Pilihan untuk Kesamaan Terapung

Untuk menguji apungan dengan tepat untuk 'kesamaan, ' adalah disyorkan untuk membandingkan perbezaan mutlaknya dengan ambang toleransi (epsilon). Nilai epsilon ini hendaklah sangat kecil, berskala mengikut ketepatan yang diingini.

Sebagai contoh, jika sectionID dan currentSectionID ialah pembolehubah terapung, coretan kod berikut menyediakan kaedah yang boleh dipercayai:

if (Math.abs(sectionID - currentSectionID) < epsilon) {
    // They are considered 'equal'
}

Dalam konteks ini, epsilon boleh ditetapkan kepada 0.00000001 atau nilai tersuai berdasarkan ketepatan yang diperlukan. Dengan menggunakan Math.abs, kami memastikan bahawa perbandingan adalah bebas daripada tanda operan.

Kesimpulan

Sementara '==' nampaknya adalah kesamaan yang ditetapkan operator untuk terapung, kelemahannya dalam mengendalikan ketepatan titik terapung dengan tepat menjadikannya tidak sesuai untuk perbandingan yang tepat. Penyelesaian pilihan melibatkan membandingkan perbezaan mutlak kepada ambang toleransi yang sesuai, memberikan penilaian kesaksamaan yang boleh dipercayai untuk nilai titik terapung di Java.

Atas ialah kandungan terperinci Mengapa Perbandingan Persamaan Langsung ('==') Bermasalah untuk Terapung di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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