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
Lepaskan: 2024-12-27 21:07:16
asal
194 orang telah melayarinya

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;
}
Salin selepas log masuk

Output kod ini akan tersalah paparan:

9999
1000
99
10
1
Salin selepas log masuk

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
}
Salin selepas log masuk

Dengan pengubahsuaian ini, output akan dipaparkan dengan betul:

10000
1000
100
10
1
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan