您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java Math.random()与Random.nextInt(int)

Java Math.random()与Random.nextInt(int)

这是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)之一,每个存储桶对应于涵盖其中一个范围的范围15011998757901651501199875790166的可能值(因为6不是2 ^ 53的视变数)。这意味着对于足够数量的骰子辊(或具有足够数量的侧面的骰子),骰子将显示自己偏向较大的铲斗。

您将要等待很长时间才能看到这种效果

Math.random()还需要大约两次处理,并且需要进行同步。

java 2022/1/1 18:18:13 有659人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶