通过平均5个均匀样本的正常随机数?

时间:2013-03-12 15:11:08

标签: random normal-distribution

查看我们应用中的一些遗留代码,发现了这种奇怪的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;
    }

2 个答案:

答案 0 :(得分:2)

通过平均几个随机均匀样本来逼近正态分布是标准的,这是Central Limit Theorem的结果。通常,采集12个样本。在你的情况下,有人决定只采取五个样本,可能是为了效率。

查看Generate random numbers following a normal distribution in C/C++

答案 1 :(得分:1)

代码似乎是正确的,它只会使0.0周围的区域具有比范围边缘更高的概率(-HALFSPREAD,HALFSPREAD)。

我怀疑这5个数字是一个很好的计算值,很可能它被选中“因为它有效”

如果您将一个RNG替换为另一个RNG,您应该能够:只要替换具有更好的实际特征,任何人都不应该依赖现有RNG的特定输出