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
Susan Sarandonasal
2024-12-31 19:27:14783semak imbas

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;
}

Output yang dijangkakan untuk kod ini ialah:

10000
1000
100
10
1

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

9999
1000
99
10
1

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; 
}

Kod ini akan menghasilkan output yang betul:

10000.000000
1000.000000
100.000000
10.000000
1.000000

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!

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