看看我們的應用程序中的一些遺留代碼,發現這個奇怪的實現正常RNG。我想換一個適當的Box-Muller轉換,但需要一些鼓勵。通過平均5個均勻樣本的正態隨機數?
如您所見,它會從-3.875到+3.875生成5個隨機數,然後對它們進行平均以獲得從-1到+1的準正態分佈值。這可能是正確的嗎?這怎麼能工作?爲什麼5個樣本?
有人請解釋:
private double GetRandomNormalNumber()
{
const double SPREAD = 7.75;
const double HALFSPREAD = 3.875;
var random = new Random();
var fRandomNormalNumber = ((random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD)
)/5;
return fRandomNormalNumber;
}
感謝您參考中心極限定理我正在尋找的 – zvolkov 2013-03-12 15:35:50
請注意,12個數字通常不是完全由於CLT而被採用,而是因爲從[0..1]開始的_single_ uniform隨機變量是1/12(因爲它是E [x^2] -E [x]^2 = 1/3-1/4 = 1/12),所以12數字給出1的差異。所以當你添加12個和減去6,您會得到_standard_正態隨機變量,其中mean = 0且variance = 1。 – andreister 2014-01-12 19:26:33