Rumah > pembangunan bahagian belakang > C++ > Mengapa Pengiraan Kebarangkalian C Saya Mengalami Ralat Titik Terapung?

Mengapa Pengiraan Kebarangkalian C Saya Mengalami Ralat Titik Terapung?

Mary-Kate Olsen
Lepaskan: 2024-11-09 17:19:02
asal
1004 orang telah melayarinya

Why Does My C   Probability Calculation Incur Floating Point Errors?

Memahami Ralat Titik Terapung Melalui Contoh C Mudah

Dalam bidang pengaturcaraan, pembolehubah titik terapung boleh memperkenalkan ralat disebabkan ketepatan terhingganya . Fenomena ini, yang dikenali sebagai ralat titik terapung, boleh timbul apabila melakukan operasi matematik yang melibatkan pembolehubah sedemikian.

Pertimbangkan coretan kod C berikut, yang cuba mengira kebarangkalian tepat dua kejayaan dalam urutan 10 peristiwa bebas, di mana setiap peristiwa mempunyai kebarangkalian 'p' kejayaan:

double p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);
Salin selepas log masuk

Pembolehubah 'pow()' dan 'choose()' mewakili fungsi matematik.

Sekarang, mari kita periksa sama ada ini kod menghadapi kemungkinan ralat titik terapung. Apabila nilai 'k' dalam persamaan di atas meningkat, magnitud istilah 'pow(1-p, k)' dan 'pilih(k, 2)' akan menjadi sangat besar. Ini boleh membawa kepada pengumpulan ralat titik terapung, kerana operasi ini dilakukan pada nombor yang semakin besar.

Untuk memvisualisasikan ini, mari kita graf persamaan 'f(k)':

f(k) = pow(1-p, k) * pow(p, k) * choose(k, 2)
Salin selepas log masuk

di mana kedua-dua 'X' dan 'Y' berada dalam skala logaritma.

Untuk komputer dengan perwakilan titik terapung 32-bit, kami menjangkakan 'f(k)' menjadi sifar untuk semua nilai 'k '. Walau bagaimanapun, disebabkan ralat titik terapung, ralat meningkat dengan ketara dengan nilai 'k' yang lebih besar. Ini jelas daripada graf yang ditunjukkan di bawah:

[Imej Graf XY dengan Skala Logaritma]

Dalam graf ini, paksi-X mewakili 'k', dan paksi-Y mewakili nilai mutlak ralat. Apabila 'k' meningkat, pengumpulan ralat menjadi lebih ketara.

Oleh itu, coretan kod yang disediakan sememangnya terdedah kepada ralat titik terapung disebabkan pengumpulan ralat pusingan dalam pengiraan kebarangkalian.

Atas ialah kandungan terperinci Mengapa Pengiraan Kebarangkalian C Saya Mengalami Ralat Titik Terapung?. 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