gpt4 book ai didi

Java Random 类,使用相同的种子和 nextBytes() 生成重复的数字?

转载 作者:行者123 更新时间:2023-11-29 08:13:23 24 4
gpt4 key购买 nike

假设我通过使用 new Random() 实例化静态最终 Random 对象来使用相同的种子,是否可以通过在同一实例中调用 nextBytes 来两次获得相同的数字?

我知道对于任何给定的种子,都可以确定所有可能的“随机”数,而且它更像是一个序列:

  synchronized protected int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
}

所以基本上如果我有这段代码:

private static final Random random = new Random();

public void doSomething() {
for (int i=0; i < 1000000000; i++) {
byte byteArray[] = new byte[8];
random.nextBytes(byteArray)
}
}

nextBytes 在遍历它可以生成的所有可能数字之前生成相同字节的可能性有多大?

这会在返回给定位的所有可能组合之前返回相同的值吗?我猜是的,但这种情况多久发生一次?

最佳答案

Random 类使用周期非常大的线性同余生成器。它不会在很长一段时间内重复一个 int 值。使用 8 字节数组调用 nextBytes 会生成两个 int 值,并将每个值分成四个 8 位值以填充数组。

我相信连续调用 nextBytes 不可能生成相同的值。这意味着随机数生成器的周期为 2。 docsnext 指定一个特定的行为,使这成为不可能。 (Random 的子类当然可以有任何您喜欢的病态行为,但是 java.util.Random 的实例将表现良好。)

关于Java Random 类,使用相同的种子和 nextBytes() 生成重复的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com