Anomali Pembahagian Titik Terapung: Mengapakah (3/5) Menghasilkan Sifar dalam Ketepatan Berganda?
Apabila melakukan operasi aritmetik pada titik terapung nombor, pengaturcara sering menemui hasil yang mengejutkan. Satu anomali sedemikian timbul dengan operator bahagian (/). Walaupun menyimpan nombor sebagai nilai titik terapung berketepatan dua kali, pembahagian mudah seperti (3/5) boleh menghasilkan keluaran sifar yang tidak dijangka.
Tingkah laku ini berpunca daripada fakta bahawa kedua-dua 3 dan 5 adalah integer secara lalai dalam C . Apabila integer digunakan dalam ungkapan aritmetik, pengendali bahagian melakukan pembahagian integer, yang membuang bahagian pecahan hasil.
Membetulkan Operasi Pembahagian
Untuk mendapatkan hasil pembahagian titik terapung yang betul, seseorang perlu memastikan bahawa sekurang-kurangnya satu operan ialah nilai titik terapung. Ini boleh dicapai dengan menukar salah satu integer kepada nombor titik terapung berketepatan dua kali. Sebagai contoh, seseorang boleh menggunakan kod berikut:
double f = 3.0 / 5;
Dalam kes ini, 3.0 ialah nombor titik terapung berketepatan dua kali, memastikan bahawa pengkompil melakukan pembahagian titik terapung, yang mengekalkan bahagian pecahan daripada hasilnya.
Dengan menukar salah satu operan kepada nilai titik terapung, operator bahagian kini menghasilkan hasil yang dijangkakan, yang ialah 0.6 dalam kes ini. Teknik ini membolehkan pengaturcara melakukan operasi aritmetik pada nombor titik terapung dengan betul dan mengelakkan keluaran sifar yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa Pembahagian Integer dalam C Menghasilkan Sifar Apabila Membahagi 3 dengan 5 sebagai Beregu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!