是否可以在Mersenne Twister RNG(Java)中指定nextInt的上限和下限

问题描述 投票:0回答:2

我需要在 Java/Kotlin(适用于 Android)中生成随机数,特别是使用 Mersenne Twister 算法。 我尝试过使用 Apache commons-math Mersenne Twister 实现,它非常适合生成随机整数。但是我需要为这些指定一个相当小的范围,整数必须在 1 到 100 之间。

Apache 实现似乎无法指定上限和下限。 有谁知道 Java/Kotlin 的任何替代 Mersenne Twister 选项接受生成的 nextInt 的边界?

java apache kotlin
2个回答
1
投票

据我所知,您可以将生成的 int 的上限传递给 nextInt 方法,因此可以编写这样的简单扩展函数:

fun MersenneTwister.nextInt(min: Int, max: Int) = min + nextInt(max - min)

请注意,像 MT 的 nextInt 结果不包含上限,因此如果需要此行为,您可能需要向 nextInt 的参数添加 1。

另请注意,这个功能我没有测试好,所以使用前请自行测试一下。


0
投票

我使用这段代码:

    (returnValueOfMersenneTwister() >>> 1) % range + max;

范围在某处定义为常数:max-min +1

注意:我直接修改了 MT 的源代码,但它也适用于任何 NextInt() 之类的实现

© www.soinside.com 2019 - 2024. All rights reserved.