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

Linda Hamilton
Lepaskan: 2024-11-01 15:39:02
asal
191 orang telah melayarinya

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!