查看我们应用程序中的一些遗留代码,发现了 Normal RNG 的这种奇怪的实现。我想将它换成适当的 Box-Muller 转换,但需要一些鼓励。
如您所见,它生成从 -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;
}