Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Ketepatan Titik Terapung Mempengaruhi Keputusan Integer Apabila Menggunakan Fungsi C `pow`?

Bagaimanakah Ketepatan Titik Terapung Mempengaruhi Keputusan Integer Apabila Menggunakan Fungsi C `pow`?

Susan Sarandon
Lepaskan: 2024-12-31 19:27:14
asal
771 orang telah melayarinya

How Does Floating-Point Precision Affect Integer Results When Using the C   `pow` Function?

Ketepatan Titik Terapung dan Pemangkasan dalam C

Dalam C , fungsi pow mengambil dua nilai titik terapung berketepatan ganda sebagai input dan mengembalikan hasil titik terapung berketepatan dua kali. Walau bagaimanapun, apabila berurusan dengan nilai eksponen yang besar, ketepatan titik terapung boleh membawa kepada hasil yang tidak dijangka.

Masalah dengan pow(10,5)

Pertimbangkan perkara berikut kod:

const int sections = 10;

for (int t = 0; t < 5; t++) {
  int i = pow(sections, 5 - t - 1);  
  cout << i << endl;
}
Salin selepas log masuk

Output yang dijangkakan untuk kod ini ialah:

10000
1000
100
10
1
Salin selepas log masuk

Walau bagaimanapun, apabila anda menjalankan kod, anda mungkin menghadapi output yang salah:

9999
1000
99
10
1
Salin selepas log masuk

Memahami Isu

Percanggahan ini timbul disebabkan oleh had ketepatan titik terapung. Dalam C , nilai titik terapung berketepatan dua mempunyai bilangan digit bererti yang terhad (kira-kira 15-17 digit perpuluhan). Apabila pow(10,5) dikira, hasilnya ialah nilai titik terapung yang besar (100000.0). Walau bagaimanapun, apabila anda memberikan nilai ini kepada pembolehubah integer (seperti i), bahagian pecahan dipotong. Oleh itu, nilai i menjadi 9999 dan bukannya 10000.

Mengelakkan Isu Ketepatan

Untuk mengelakkan isu ketepatan tersebut, anda boleh menggunakan pow(10.0, 5) secara terus dalam pernyataan cout, yang dinilai sebagai nilai titik terapung berketepatan dua dan dibundarkan apabila dicetak:

for (int t = 0; t < 5; t++) {
  cout << pow(sections, 5-t-1) << endl; 
}
Salin selepas log masuk

Kod ini akan menghasilkan output yang betul:

10000.000000
1000.000000
100.000000
10.000000
1.000000
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Ketepatan Titik Terapung Mempengaruhi Keputusan Integer Apabila Menggunakan Fungsi C `pow`?. 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