Bahagian Integer Menghasilkan Sifar Mengejutkan dalam Pembolehubah Berganda
Dalam cuba mengira pembahagian mudah (3/5), anda mungkin menghadapi keputusan yang tidak dijangka . Walaupun menyimpan hasil dalam pembolehubah berketepatan dua kali, hasilnya mungkin muncul secara tidak menentu sebagai sifar. Untuk membongkar misteri ini, mari kita siasat mekanisme asas:
Dalam coretan kod yang disediakan, kedua-dua dividen (3) dan pembahagi (5) ialah integer. Secara lalai, C mentafsirkan pembahagian ini sebagai pembahagian integer, yang membulatkan ke bawah hasil dan membuang bahagian pecahan. Dalam kes ini, 3 dibahagikan dengan 5 menghasilkan 0, seperti yang dijangkakan dalam pembahagian integer.
Untuk membetulkan isu ini dan mendapatkan pembahagian titik terapung yang dikehendaki, kita perlu memastikan sekurang-kurangnya satu daripada operan diwakili sebagai nombor sebenar. Ini boleh dicapai dengan menambahkan ".0" sama ada pada pembahagi atau dividen:
double f = 3.0 / 5; // Explicitly making the dividend a real number // or double f = 3 / 5.0; // Explicitly making the divisor a real number
Dengan menukar salah satu operan kepada nombor nyata, kami memaksa pengkompil untuk melaksanakan pembahagian titik terapung. Ini memastikan bahawa bahagian pecahan dikekalkan dan hasil yang betul (0.6 dalam kes ini) disimpan dalam pembolehubah f.
Atas ialah kandungan terperinci Mengapa Pembahagian Integer dalam C Menghasilkan Sifar Apabila Disimpan dalam Pembolehubah Berganda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!