Java中的随机正态分布返回范围外的值

use*_*269 1 java random normal-distribution

可能重复:
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]); 
    }


}
Run Code Online (Sandbox Code Playgroud)

Kai*_*fei 8

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;

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