我正在生成范围为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);
}
}
}
答案 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)
-> arandomGenerator.nextDouble()
-> χ(x)5
-> b所以是的,它是均匀分布的。
抱歉关于直方图的第二个问题,因为它不清楚并使我感到困惑。
参考链接:[1]:https://perso.ensta-paris.fr/~diam/java/online/notes-java/summaries/60mathsum.html