Mengapa Kesamaan Pembolehubah Berganda dan Terapung Boleh Menipu
Jenis data titik terapung seperti apungan dan berganda adalah penting untuk mewakili nombor nyata dalam pengaturcaraan. Walau bagaimanapun, memahami nuansanya adalah penting untuk mengelakkan keputusan yang mengejutkan.
Ketepatan dan Pembundaran: Kesan Nakal
Pembolehubah terapung dan berganda mempunyai ketepatan yang terhad, bermakna ia hanya boleh menyimpan bilangan digit terhingga tanpa kehilangan maklumat. Had yang wujud ini membawa kepada ralat pembundaran, di mana perwakilan dalaman nombor dipenggal untuk dimuatkan dalam ruang yang tersedia.
Contoh Ilustrasi
Pertimbangkan nombor 1.1 yang diwakili sebagai kedua-dua terapung dan berganda. Disebabkan ketepatan yang terhad, ia diwakili secara dalaman sebagai anggaran:
float f = 1.1; // Internally stored as an approximation double d = 1.1; // Internally stored as an approximation
Membandingkan f dan d untuk kesamaan akan mengembalikan palsu kerana ralat pembundaran menghasilkan perwakilan dalaman yang berbeza, walaupun ia mewakili nombor "sama".
Mengelakkan Masalah
Untuk mengelakkan perbandingan yang mengelirukan, sebaiknya elakkan menggunakan pengendali kesamaan (==) untuk nombor titik terapung. Sebaliknya, perkenalkan ambang toleransi (epsilon) dan bandingkan perbezaan antara nombor untuk menentukan sama ada ia berada dalam julat yang boleh diterima:
if (abs(f - d) < epsilon) { // They are considered equal within the tolerance }
Dengan memahami perangkap apungan dan perbandingan berganda, anda boleh mengelakkan keputusan yang tidak dijangka dan pastikan ketepatan kod anda.
Atas ialah kandungan terperinci Mengapa Membandingkan Pembolehubah Terapung dan Berganda untuk Kesaksamaan Kadangkala Membawa Kepada Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!