栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)之一,每个存储桶对应于涵盖其中一个范围的范围

1501199875790165
1501199875790166
的可能值(因为6不是
2 ^ 53
的视变数)。这意味着对于足够数量的骰子辊(或具有足够数量的侧面的骰子),骰子将显示自己偏向较大的铲斗。

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号