Java Math.random()与Random.nextInt(int)
是什么区别Math.random() * n和Random.nextInt(n)在那里n是一个整数?
回答:
这是Gili链接到的Sun论坛帖子中为什么“为什么比同时具有更高的效率和更少的偏见” 的详细说明:Random.nextInt(n)Math.random() * n
Math.random()
内部使用Random.nextDouble()
。
Random.nextDouble()
两次使用Random.next()
来生成一个在其尾数中具有近似均匀分布的位的double,因此它在0到1-(2 ^ -53)
的范围内均匀分布。
Random.nextInt(n)
平均使用Random.next()
少于两次-它使用一次,并且如果获得的值大于MAX_INT以下的n的最高倍数,它将再次尝试,否则返回模n的值(这是防止高于MAX_INT的n的最高倍数的值倾斜),因此返回一个在0到n-1范围内均匀分布的值。
在按比例缩放6之前,Math.random(
)的输出是从均匀分布得出的2 ^ 53个可能值之一。
缩放为6不会更改可能值的数量,然后将其强制转换为int会强制将这些值放入六个“存储桶”(0、1、2、3、4、5)之一,每个存储桶对应于涵盖其中一个范围的范围1501199875790165
或1501199875790166
的可能值(因为6不是2 ^ 53
的视变数)。这意味着对于足够数量的骰子辊(或具有足够数量的侧面的骰子),骰子将显示自己偏向较大的铲斗。
您将要等待很长时间才能看到这种效果。
Math.random()
还需要大约两次处理,并且需要进行同步。
以上是 Java Math.random()与Random.nextInt(int) 的全部内容, 来源链接: utcz.com/qa/415089.html