java中的统一随机分布

时间:2014-05-23 15:28:01

标签: java math

我正在生成范围为5.0 - 9.0的随机值,理论上生成的数字仍均匀分布 ??

以及如何实现直方图,我的意思是我们需要实现直方图的值?

import java.util.Random;

public class GenerateNumber {
    public static void main(String args[]) {

        Random randomGenerator = new Random();

        for (int i = 0; i < 11; i++) {
            double randomDou = randomGenerator.nextDouble() * (9 - 5 + 1) + 5;
            System.out.println(randomDou);
        }
    }
}
  • 我的数学是零...,请帮帮我

2 个答案:

答案 0 :(得分:0)

你在正确的路径上 - 线性地缩放数字是正确的。

要测试您的逻辑,请从nextDouble()

插入0.0和1.0作为值
0.0 * (9 - 5 + 1) + 5 = 5, o.k.
1.0 * (9 - 5 + 1) + 5 = 10, not o.k.

这是测试数学的基本方法。

答案 1 :(得分:0)

小数学错误

代码中有一个小错误。您希望随机生成介于 5.0 到 9.0 之间的数字,但您发布的代码会为您提供介于 5.0 和 10.0 之间的数字。所以代码应该按照下面的方式稍微改动一下:

import java.util.Random;

public class demo {
    public static void main(String args[]) {

        Random randomGenerator = new Random();

        for (int i = 0; i < 11; i++) {
            double randomDou = randomGenerator.nextDouble() * (9 - 5) + 5;
            System.out.println(randomDou);
        }
    }
}

它应该是 (9 - 5) 而不是 (9 - 5 + 1),因为后者会给你一个从 5.0(不包括)到 10.0(包括)的范围。

均匀性

是的,该数字将按照您的方式均匀分布。 java.util.random 生成均匀分布的数字 [1]。直观地说,aχ(x) + b(1) 其中 a 和 b 都是常数也是均匀分布的,当且仅当 χ(x) 是均匀分布的。

回到问题,randomGenerator.nextDouble() * (9 - 5) + 5 的形式是Eq.(1) where

  • (9 - 5) -> a
  • randomGenerator.nextDouble() -> χ(x)
  • 5 -> b

所以是的,它是均匀分布的。

抱歉关于直方图的第二个问题,因为它不清楚并使我感到困惑。

参考链接:[1]:https://perso.ensta-paris.fr/~diam/java/online/notes-java/summaries/60mathsum.html