首頁 > 後端開發 > C++ > 為什麼我的 C 機率計算會出現浮點錯誤?

為什麼我的 C 機率計算會出現浮點錯誤?

Mary-Kate Olsen
發布: 2024-11-09 17:19:02
原創
1005 人瀏覽過

Why Does My C   Probability Calculation Incur Floating Point Errors?

透過一個簡單的C 範例了解浮點錯誤

在程式設計領域,浮點變數由於其有限的精確度可能會引入錯誤。這種現象稱為浮點錯誤,在執行涉及此類變數的數學運算時可能會出現。

考慮以下C 程式碼片段,它嘗試計算10 個獨立事件序列中恰好兩次成功的機率,其中每個事件都有成功的機率「p」:

double p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);
登入後複製

變數“pow()”和“choose()”表示數學函數。

現在,讓我們檢查一下這段程式碼是否面臨潛在的浮點錯誤。隨著上式中'k'的值增加,項'pow(1-p, k)'和'choose(k, 2)'的量級將變得非常大。這可能會導致浮點錯誤累積,因為這些運算是在越來越大的數字上執行的。

為了形象化這一點,讓我們繪製方程式「f(k)」:

f(k) = pow(1-p, k) * pow(p, k) * choose(k, 2)
登入後複製

其中「X」和「Y」都採用對數刻度。

對於具有 32 位元浮點表示的計算機,我們預期對於「k」的所有值,「f(k)」為零。然而,由於浮點誤差,「k」值越大,誤差就會顯著增加。從下圖可以看出這一點:

[具有對數刻度的XY 圖圖像]

在此圖中,X 軸代表“k”,Y 軸代表誤差的絕對值。隨著「k」的增加,誤差累積變得更加明顯。

因此,由於機率計算中捨入誤差的累積,所提供的程式碼片段確實容易受到浮點錯誤的影響。

以上是為什麼我的 C 機率計算會出現浮點錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板