使用高斯分布生成介于0和1之间的随机数

Yus*_*sef 7 c# random

我想在C#中编写一个方法来生成一个随机数,高斯分布在范围内[0:1](事先在[0-x]中).我找到了这段代码,但无法正常工作

Random rand = new Random(); //reuse this if you are generating many
double u1 = rand.NextDouble(); //these are uniform(0,1) random doubles
double u2 = rand.NextDouble();
double randStdNormal = Math.Abs( Math.Sqrt(-2.0 * Math.Log(u1)) * 
                                 Math.Sin(2.0 * Math.PI * u2));
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 4

我写了一篇关于如何生成具有任何给定分布的随机数的博客文章:

http://ericlippert.com/2012/02/21/generate-random-non-uniform-data/

总结一下,你想要的算法是:

  1. 计算出所需的概率分布函数,使得曲线部分下方的面积等于该范围内随机生成的值的概率。
  2. 对概率分布进行积分以确定累积分布
  3. 反转累积分布以获得分位数函数
  4. 通过分位数函数运行均匀分布的 (0,1) 随机数据来对其进行转换。

当然,如果您已经知道所需分布的分位数函数,则无需执行步骤一到步骤三。