Possible Duplicate:
problem with Random.nextGaussian()




我正在开发小型Java应用程序,以使随机正态分布并给出50个值。我使用mean = 0.0和std = 1.0,但是我得到的结果超出范围是有些值小于0.0,而其他值大于1.0,有人可以帮助我吗?

以下是我使用的代码:

public static void main(String[] args) {

    double[] list = new double[50];
    double mean = 0.0, std = 1.0;
    Random rng = new Random();

            // to generate 50 values random normal distribution
    for(int i = 0;i<list.length;i++) {
      list[i] = mean + std * rng.nextGaussian();
    }

            // to print the generated values from the list
    for(int i = 0;i<list.length;i++)
            {
            System.out.println(list[i]);
    }


}

最佳答案

nextGaussian()返回下一个伪随机数,与该随机数生成器的序列的平均值为0.0,标准差为1.0的高斯(“正态”)分布双精度值。 (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextGaussian()

所以std * rng.nextGaussian();应该是std * (1 + rng.nextGaussian())/2;

但是,结果可能不是您想要的高斯,您需要使用a中的不同b(a + rng.nextGaussian())/b调整平均值和std

10-04 15:14