Почему моя математика не добавляется в мой LCG?
Например, здесь: 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);
}
Я получаю вывод: 6 3 0 7 4 1 8 5 2 9
Вместо ожидаемых 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
1 ответ
Кажется, это просто неправильное понимание итерации. Это не проблема с уравнением, но то, что вы делаете с результатом уравнения.
Я читаю Xn+1 = (aXn + c) mod m
как
Следующее значение x будет текущим значением
x
плюсc
мод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