如何使用Random.nextGaussian()生成总和为1的N个双精度数

时间:2014-06-29 20:00:16

标签: java random normal-distribution

我想生成N个随机双打,它们的总和是1。

此外,N个随机双打应服从正态分布。

我理解nextGuassian()中的Random可以生成正常的分配号码。

但如何实现上述目标?

1 个答案:

答案 0 :(得分:2)

double[] generateNRandomDoublesWhichSumToOne(Random random, int n) {
  if (random == null) throw new NullPointerException();
  if (n <= 0) throw new IllegalArgumentException();

  double[] values = new double[n];
  double sum = 0;
  for (int i = 0; i < n; ++i) {
    values[i] = random.nextGaussian();
    sum += values[i];
  }
  for (int i = 0; i < n; ++i) {
    values[i] /= sum;
  }
  return values;
}