【发布时间】:2016-09-27 07:18:51
【问题描述】:
我正在尝试使用 Random.nextDouble() 获取 1.0 和 10.0 之间的随机双数:
double number = 1.0 + (10.0-1.0) * Random.nextDouble();
模拟这 10,000 次我发现 1.0 和 10.0 的概率低于其余的。获得这些数字的唯一方法是要求 Random.nextDouble() 为 0.0 或 1.0。所以本质上因为Random.nextDouble() 给出了一个介于 0.0 和 1.0 之间的随机数,它实际上不太可能导致 0.0 或 1.0。
我想知道有没有办法解决这个问题?还是我应该尝试一种完全不同的方式?
编辑:
所以问题确实在于生成随机双精度数后将数字四舍五入到小数点后一位。我现在做的一个非常粗略的解决方案是在 0 到 91 之间生成一个 randomIntValue,然后像这样初始化 double number = 1.0 + (randomIntValue * 0.1)。
这不是我想说的最干净的选择。
【问题讨论】:
-
已经有很多问题了。谷歌如何在Java中生成一个范围内的随机数。
-
有吗?在哪里?
-
OP 似乎知道这些。我认为这更像是一个浮点陷阱问题。
-
nextDouble 可以产生 0.0 但不能产生 1.0,所有值的可能性相同。注意:
Random有 2^48 个可能的值,10,000 个样本不太可能有意义。
标签: java random probability