Mengapa pow(10,5) Memaparkan 9,999 Daripada 10,000 dalam C
Dalam C , apabila menggunakan fungsi pow() dengan integer input dan eksponen titik terapung, hasil yang tidak dijangka boleh berlaku disebabkan oleh perwakilan titik terapung nilai. Khususnya, pow(10.0, 5) boleh menghasilkan nilai 9999.9999999 atau serupa. Apabila nilai titik terapung ini diberikan kepada pembolehubah integer, ia dipenggal.
Sebagai contoh, pertimbangkan coretan kod berikut:
const int sections = 10; for(int t = 0; t < 5; t++){ int i = pow(sections, 5- t -1); // <-- pow() with integer base, floating-point exponent cout << i << endl; }
Output kod ini akan tersalah paparan:
9999 1000 99 10 1
Walau bagaimanapun, jika kod diubah suai untuk menggunakan fungsi pow() terus dalam cout kenyataan, hasil yang dijangkakan diperoleh:
for(int t = 0; t < 5; t++){ cout << pow(sections,5-t-1) << endl; // <-- pow() used directly in cout }
Dengan pengubahsuaian ini, output akan dipaparkan dengan betul:
10000 1000 100 10 1
Percanggahan ini berlaku kerana dalam contoh pertama, hasil titik terapung daripada pow(bahagian, 5- t -1) dipotong apabila ditugaskan kepada pembolehubah integer. Walau bagaimanapun, dalam contoh kedua, hasil titik terapung dibundarkan apabila dihantar terus ke cout, menghasilkan paparan yang betul.
Atas ialah kandungan terperinci Mengapakah `pow(10, 5)` Kadang-kadang Mengembalikan 9999 Daripada 10000 dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!