当前位置: 首页 > 面试题库 >

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

陆野
2023-03-14
问题内容

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

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

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



 类似资料:
  • 我目前正在学习和学习Java。现在我必须提交一个交付,并使用。 现在有人向我报告说,我的程序不可编译。(可能是测试人员用太低的版本编译的?)。这就是为什么我在互联网上搜索Random的文档。 https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/random.html

  • 这是我的功能: 我有十个测试,完全是这样的: 因此,根据我的计算,一次测试只会产生1/10,000次重复运行,10次测试只会产生1/1000次重复运行。然而,它在大约50%的运行中创建了副本,我不知道为什么。

  • 问题内容: 我想在逻辑范围内生成一个随机整数。因此,举例来说,我正在编写一个程序来“掷掷”具有指定边数的骰子。 现在的问题是,它将返回边与零之间的值, 包括 0和0,这是没有意义的,因为大多数骰子从1到6、9等。因此,我如何指定nextInt应该在1和边数之间起作用? 问题答案: 要在 from 和 to (包括)之间生成一个随机的int值(均匀分布),请使用: 以您的情况(1 ..面):

  • 在这个例子中我做错了什么? 正如你所看到的,NumOf3s的高度是1.5米,而其余的几乎是一半。我的代码中有什么东西导致了这一切的发生吗?

  • 问题内容: 我正在尝试遵循本教程: http://www.vogella.com/articles/AndroidCalendar/article.html 我了解putExtra的作用 但是我不明白setData()是什么意思? Android文档并没有太大帮助: 这对常数意味着什么 ? 当我注释掉此行时,似乎没有任何影响。 问题答案: 用于指向 位置 的数据对象(例如像文件),而增加了 简单的

  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?