Rumah >pembangunan bahagian belakang >C++ >Mengapakah `pow(10, 5)` Kadang-kadang Mengembalikan 9999 Daripada 10000 dalam C ?

Mengapakah `pow(10, 5)` Kadang-kadang Mengembalikan 9999 Daripada 10000 dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-27 21:07:16196semak imbas

Why Does `pow(10, 5)` Sometimes Return 9999 Instead of 10000 in C  ?

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!

Kenyataan:
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