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