亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C / C ++中按照正態分布生成隨機數

在C / C ++中按照正態分布生成隨機數

C++ C
收到一只叮咚 2019-08-30 17:56:37
如何在C或C ++中正常分布后輕松生成隨機數?我不想使用Boost。我知道Knuth詳細談論了這個問題,但我現在還沒有他的書。
查看完整描述

3 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

有許多方法可以從常規RNG生成高斯分布數。


該箱穆勒變換是常用的。它正確生成具有正態分布的值。數學很容易。您生成兩個(統一)隨機數,并通過對它們應用公式,您將獲得兩個正態分布的隨機數。返回一個,并保存另一個以獲取隨機數的下一個請求。


查看完整回答
反對 回復 2019-08-30
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

C ++ 11

C ++ 11提供的std::normal_distribution,這就是我今天要走的路。


C或更舊的C ++

以下是按復雜程度遞增的順序解決方案:


從0到1添加12個均勻隨機數并減去6.這將匹配正常變量的均值和標準差。一個明顯的缺點是范圍限制在±6 - 與真正的正態分布不同。


Box-Muller變換。這在上面列出,并且實現起來相對簡單。但是,如果您需要非常精確的樣本,請注意Box-Muller變換與一些統一的生成器相結合會遭受稱為Neave Effect 1的異常現象。


為了獲得最佳精度,我建議繪制制服并應用反向累積正態分布來得到正態分布的變量。這是一個非常好的逆累積正態分布算法。


1. HR Neave,“使用具有乘法同余偽隨機數發生器的Box-Muller變換”,Applied Statistics,22,92-97,1973


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關注
  • 1120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號