程序詢問用戶翻轉硬幣的次數(n;試用次數)。計算概率C++伯努利試驗
成功被認爲是一個頭。
完美無瑕,程序會創建一個介於0和1之間的隨機數。0被視爲正面和成功。
然後,程序應該輸出獲得x個頭的期望值。例如,如果硬幣被翻轉4次,有什麼用公式
nCk * p^k * (1-p)^(n-k)
Expected 0 heads with n flips: xxx
Expected 1 heads with n flips: xxx
...
Expected n heads with n flips: xxx
當與「較大」號這樣做下面的概率,數字出來怪異值。如果將15或20個輸入到輸入中,就會發生這種情況。我已經得到了0和負值,應該是xxx的值。
調試,我已經注意到nCk已經出來是負面的,不正確的上限值和beleive這是問題。我用這個公式我的組合:
double combo = fact(n)/fact(r)/fact(n-r);
這裏是我的事實功能的僞代碼:
long fact(int x)
{
int e; // local counter
factor = 1;
for (e = x; e != 0; e--)
{
factor = factor * e;
}
return factor;
}
有什麼想法?我的猜測是我的階乘或組合函數超過最大值或什麼的。
你可能會得到整數溢出。嘗試將事件函數的類型改爲double,並查看是否有更高的值被接受。 –
這裏:http://stackoverflow.com/a/4701106/576911是如何計算'nCk'以最小的溢出危險,如果發生溢出,它不會默默地做。 –