gpt4 book ai didi

java - 逻辑错误帮助: LCG only returns even values

转载 作者:行者123 更新时间:2023-12-02 00:15:47 26 4
gpt4 key购买 nike

我正在制作两个随机游走程序,一个使用 Java API Math.random() (工作正常),另一个使用 LCG,但范围为 8 的 LCG 仅返回偶数(2、4、 6、8)。

我以前从未尝试过制作自己的 LCG,我的 a 和 c 值来自维基百科文章,如果这些是问题所在,并且有人有一个好方法来提出 a 和 c 的良好值,那就是伟大的。对于种子,我使用 System.nanoTime()

我还尝试了从维基百科找到的 a 和 c 的其他值,并且只是输入随机数,但这些值都不起作用,大多数只返回 2 和 6 或 4 和 8。

public static int getLCGRandom(int randomRange) {
//For my uses randomRange is always 8

long a = 6364136223846793005L;
long c = 1442695040888963407L;

int number = (int) Math.abs(((System.nanoTime() * a + c) % randomRange)) + 1;

return number;
}

同样,我希望它能够输出 1-8 中的任何数字,但它只输出偶数。

最佳答案

谢谢大家的评论,我设法让它使用一个序列,并为我的系统找到了 a 和 c 的工作值,仅使用 System.nanoTime() 来获取初始种子,然后使用函数的输出为 future 的种子。

    public static int getLCGRandom(int randomRange) {
long a = 5;
long c = 2;
int number = (int) Math.abs(((SeedList.oldSeed * a + c) % randomRange)) + 1;
SeedList.oldSeed = number;
return number;
}

static class SeedList {
static long oldSeed = System.nanoTime();
}

所以这实际上并没有按照我想要的方式工作,因为它使用一个仅基于先前输出的序列,它只重复相同的小循环(范围为8),最终导致我的“随机游走”进入绕一圈并以非常清晰的图案行走。

关于java - 逻辑错误帮助: LCG only returns even values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58089998/

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