Math.random() 如何生成超出其 "native" 范围的随机数?
How does Math.random() generate random numbers beyond it's "native" range?
我知道 Math.random()
本身会生成一个介于 0.0 和 1.0 之间的随机双精度值,包括 0.0 但不包括 1.0。我也知道转换为 int 会截断小数点后的所有内容而不四舍五入。
我不明白的是
System.out.println((int)(Math.random() * 27));
实际上可以产生一个从 0 到 26 的随机数。由于 Math.random()
本身只能产生 0.0 到 0.9,而 9 * 27 是 24.3,看起来上面的代码应该是最大的整数produce 是 24。这是如何工作的?
通过搜索这个问题的答案,我发现有更好的方法来生成随机数,但我正在阅读的书描述了这种特殊方法,我想了解它是如何工作的。
Math.random()
的范围不是 0.0
到 0.9
,它是 0.0
到最大可能的 double
小于 1.0
,大约0.9999999999999999左右。
Returns:
a pseudorandom double greater than or equal to 0.0 and less than 1.0.
如果您将可能的最大结果乘以 27
并通过强制转换为 int
将其截断,您将得到 26
.
您阅读 Math.random
的规格有误。
可生成的数字在0.0
(含)和1.0
(不含)之间。但它也可以产生一些 0.99999
左右的东西。
因为你乘以 27
它会给你一个介于 0.0
(含)和 27
(不含)之间的数字。因此,可以生成的最大数量是 26.99999999...
.
稍后,您将转换为一个整数:(int)
。此转换 取整数部分 ,因此虽然结果可以是 26.999999...
,但使用 26
。
最后要说的是 Java 有一个不错的 Random
class, that provides some functionality to generate integer numbers. For instance nextInt
在那里你可以给出最大(独占)数量。
Since Math.random() by itself only produces 0.0 through 0.9
此说法不正确。 Math.random()
产生 [0, 1) 范围内的随机数。这意味着上限不是 0.9 - 它可以产生 0.99、0.999、0.9999 或任意接近 1 的任何十进制数。举个例子,27 * 0.99
是 26.73,它被截断为 26
.
我知道 Math.random()
本身会生成一个介于 0.0 和 1.0 之间的随机双精度值,包括 0.0 但不包括 1.0。我也知道转换为 int 会截断小数点后的所有内容而不四舍五入。
我不明白的是
System.out.println((int)(Math.random() * 27));
实际上可以产生一个从 0 到 26 的随机数。由于 Math.random()
本身只能产生 0.0 到 0.9,而 9 * 27 是 24.3,看起来上面的代码应该是最大的整数produce 是 24。这是如何工作的?
通过搜索这个问题的答案,我发现有更好的方法来生成随机数,但我正在阅读的书描述了这种特殊方法,我想了解它是如何工作的。
Math.random()
的范围不是 0.0
到 0.9
,它是 0.0
到最大可能的 double
小于 1.0
,大约0.9999999999999999左右。
Returns:
a pseudorandom double greater than or equal to 0.0 and less than 1.0.
如果您将可能的最大结果乘以 27
并通过强制转换为 int
将其截断,您将得到 26
.
您阅读 Math.random
的规格有误。
可生成的数字在0.0
(含)和1.0
(不含)之间。但它也可以产生一些 0.99999
左右的东西。
因为你乘以 27
它会给你一个介于 0.0
(含)和 27
(不含)之间的数字。因此,可以生成的最大数量是 26.99999999...
.
稍后,您将转换为一个整数:(int)
。此转换 取整数部分 ,因此虽然结果可以是 26.999999...
,但使用 26
。
最后要说的是 Java 有一个不错的 Random
class, that provides some functionality to generate integer numbers. For instance nextInt
在那里你可以给出最大(独占)数量。
Since Math.random() by itself only produces 0.0 through 0.9
此说法不正确。 Math.random()
产生 [0, 1) 范围内的随机数。这意味着上限不是 0.9 - 它可以产生 0.99、0.999、0.9999 或任意接近 1 的任何十进制数。举个例子,27 * 0.99
是 26.73,它被截断为 26
.