Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';我的数学在我的LCG里加起来了吗?_Java_Lcg - Fatal编程技术网

Java 为什么';我的数学在我的LCG里加起来了吗?

Java 为什么';我的数学在我的LCG里加起来了吗?,java,lcg,Java,Lcg,例如: 我正在尝试为一个示例问题集实现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 (in

例如:

我正在尝试为一个示例问题集实现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);

    }
公共静态无效lcg(){
INTA=7;
int c=7;
int m=10;
int x0=7;
int N=10;
对于(int x=x0;x
我得到输出: 6. 3. 0 7. 4. 1. 8. 5. 2. 九,

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

我在纸上也看到了同样的情况。有人能找出哪里出了问题吗

类似地,a=10,c=7,m=11,x0=3应该给出一个4,3,4,3的重复模式,但我得到 4. 3. 2. 1. 0 10 9 8. 7.
6

这似乎只是对迭代的误解。这似乎不是方程的问题,而是对方程结果的处理

我读到
Xn+1=(aXn+c)mod m
as

x的下一个值将是
x
当前值,加上
c
,mod
m

请注意我的重点。您正在丢弃当前值
x
result
),然后在下一次迭代中使用等式中的“迭代计数器变量”

将循环更改为

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
for(int x=x0,i=0;i<5;i++){
//注x正在更新
x=(a*x+c)%m;
系统输出打印(x);
}
69076

“我在纸上得到了相同的结果”。你是说当你在纸上完成时,你会得到与程序相同的结果,还是与预期的答案相同?这看起来像是一次迭代。难道不是
x
应该成为上一次迭代的结果吗?或者使用类似
的for(int I=0;I
并在循环之前将
x
初始化为
x0
。@msandiford更新谢谢。是的,很明显我误解了公式,因为我是对一个系列应用函数,而不是对结果进行迭代。@BrianJackson没问题。当我需要理解方程或调试问题时,我喜欢大声说出方程。这是正确的经常暴露出误解。