Mengapa pow(5, 2) Mengembalikan 24: Soal Jenis Data dan Pembundaran
Dalam program C yang disediakan, pow( ) fungsi digunakan untuk mengira kuasa nombor. Walau bagaimanapun, apabila pow(5, 2) dilaksanakan, atur cara secara tidak dijangka mengembalikan 24, bukannya hasil yang betul 25. Ini mungkin membuatkan pengaturcara bingung, tertanya-tanya mengapa fungsi itu kelihatan tidak berfungsi.
Akar daripada isu ini terletak pada pengendalian jenis data dalam fungsi pow(). Secara lalai, pow() mengembalikan nombor titik terapung berketepatan dua, yang boleh menyimpan nilai perpuluhan. Walau bagaimanapun, atur cara itu kemudian memberikan dua kali ganda ini kepada pembolehubah integer, dengan berkesan memotong mana-mana bahagian perpuluhan. Dalam kes 5^2, hasil sebenar ialah 24.99997 atau serupa, tetapi pemangkasan membundarkannya kepada 24.
Untuk menyelesaikan masalah ini dan mendapatkan hasil integer yang betul, adalah perlu untuk membundarkan pow secara eksplisit () nilai kepada integer terdekat. Ini boleh dicapai dengan menambah 0.5 pada hasil sebelum memberikannya kepada pembolehubah integer. Coretan kod berikut menunjukkan pembetulan:
int answer; answer = pow(number1, number2) + 0.5;
Dengan menambahkan 0.5, kami secara berkesan membundarkan dua kali ganda kepada integer terdekat, memastikan keputusan 5^2 menjadi 25 seperti yang dijangkakan.
Adalah penting untuk ambil perhatian bahawa teknik pembundaran ini hanya sesuai untuk kes di mana hasil pengiraan kuasa dijamin sebagai integer. Dalam situasi di mana hasilnya mungkin bukan integer (cth., punca kuasa dua), adalah lebih baik untuk menetapkan hasil pow() kepada pembolehubah berganda atau terapung untuk mengekalkan nilai pecahan.
Atas ialah kandungan terperinci Mengapakah `pow(5, 2)` Mengembalikan 24 dalam C : Isu Jenis Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!