为什么Java中的Math.random()返回[0,1]中的double而不是其他区间?

时间:2017-03-06 10:38:09

标签: algorithm random

我昨天在AP计算机科学课程中提到了这个问题。

问我的CS老师 - >他不知道。

搜索网络 - >松散相关的答案。

学术文章 - >试试,但无法理解。

我猜这个问题与随机数生成算法有关。

3 个答案:

答案 0 :(得分:1)

是的,这取决于算法,但我会说它是按照这种方式设计的,这样你就可以用最简单的方式操作范围:将它与另一个整数相乘。除了其他随机函数的便利性和标准之外,似乎没有任何具体原因。

答案 1 :(得分:0)

它返回[0,1]中的数字,因为这是最有意义的。使用简单的公式很容易转换为其他区间[低,高]:

low + Math.random() * (high - low)

您还会选择具有同样简单转换属性的其他内容吗?

答案 2 :(得分:0)

可允许的位模式存在约束,可以表示double,因此您不能只生成一个随机位加载并期望它是一个有效的double。有NaNINFINITY之类的内容以及完全无效的模式。

鉴于此,生成双精度的最简单方法是进行除法。代码已经在那里完成所需的所有工作。为了得到最精细的双粒子,我们需要将两个大数除以低的结果。这意味着:

random_double = random_integer / (1.0 * max_random)

由于大多数随机整数生成器在[0,max_random]范围内生成,因此生成的double在[0,1.0]范围内。

$ 0.02