gpt4 book ai didi

java - 为什么我的数学在我的 LCG 中没有相加?

转载 作者:行者123 更新时间:2023-12-02 12:14:28 25 4
gpt4 key购买 nike

例如这里:http://www.math.cornell.edu/~mec/Winter2009/Luo/Linear%20Congruential%20Generator/linear%20congruential%20gen1.html

我正在尝试为示例问题集实现 LCG,但它对我不起作用,我似乎无法弄清楚为什么?

方程很简单:Xn+1 =(aXn + c) mod m

来自上面的引用:例如,当X0=a=c=7,m=10时得到的序列为7, 6, 9, 0, 7, 6, 9, 0, ...

例如,在 java 中实现它 -

public static void lcg(){

int a = 7;
int c = 7;
int m = 10;
int x0 = 7;
int N = 10;

for (int x = x0; x < x0+N; x++){

int result = (a*x + c) % m;

System.out.println(result);

}

我得到输出:6307418529

而不是预期的 7,6,9,0,...

我在纸上得到了同样的结果。谁能弄清楚出了什么问题吗?

类似地,a=10, c=7, m=11, x0 = 3 应该给出 4,3,4,3 的重复模式,但我得到43210109876

最佳答案

这似乎只是对迭代的误解。看起来不是方程的问题,而是你如何处理方程的结果。

我将Xn+1 = (aXn + c) mod m读为

The next value of x will be the current value of x, plus c, mod m".

请注意我的强调。您将丢弃x(结果)的当前值,然后在下一次迭代中仅使用方程中的“迭代计数器变量”。

将循环更改为

for (int x = x0, i = 0; i < 5; i++) {
// Note x is being updated instead
x = (a*x + c) % m;

System.out.print(x);
}

69076

关于java - 为什么我的数学在我的 LCG 中没有相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46289707/

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