Rumah >pembangunan bahagian belakang >C++ >Mengapa Membandingkan Pembolehubah Terapung dan Berganda untuk Kesaksamaan Kadangkala Membawa Kepada Keputusan Yang Tidak Dijangka?

Mengapa Membandingkan Pembolehubah Terapung dan Berganda untuk Kesaksamaan Kadangkala Membawa Kepada Keputusan Yang Tidak Dijangka?

Linda Hamilton
Linda Hamiltonasal
2024-11-01 15:39:02277semak imbas

Why Does Comparing Float and Double Variables for Equality Sometimes Lead to Unexpected Results?

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!

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