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

标签 java random normal-distribution

<分区>

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() 从该随机数生成器的序列中返回下一个伪随机、高斯(“正态”)分布 double 值,均值为 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 + rng.nextGaussian())/b

关于java - Java 中的随机正态分布返回范围外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657143/

相关文章:

c++ - 使用 rand() 生成随机数

java - 数组 [i] = java.lang.IndexOutOfBoundsException : Invalid array range 10 to 10

r - 使用ggplot2在直方图上绘制置信区间

java - Java 的垃圾收集器是如何工作的?

java - 动态创建对象时未找到类 - Java

python - Cython 随机滚动不会产生预期的输出

matlab - matlab 中具有高斯分布和均匀分布的随机数

java - 数组串数字

java - Android Studio错误 "Cannot resolve method for method .add"

c# - 如何从整数范围内生成正态分布的随机数?