Mersenne Twister (mt19937ar.c) не возвращает случайное число
Я попытался найти примеры того, как использовать вариант Mersenne Twister mt19937ar.c, но большинство из них появилось на C++, а другие, похоже, используютmtwist.h
,
Мой код ниже:
int getRandomNum(void)
{
int i;
i = (int) genrand_int32();
return i;
}
int main(int argc, char **argv)
{
...
int m = getRandomNum();
printf("m = %d", m);
...
return 0;
}
просто выплевывает одно и то же целое число снова и снова. Похоже на проблему заполнения, но каждая найденная реализация получения случайного числа с mt19937
просто просто вызывает genrand_int32()
, Я делаю это неправильно?
1 ответ
Мерсенн Твистер не волшебен; у него нет способа получения случайных результатов из предсказуемого ввода. Если вы хотите случайную последовательность, вы должны запустить генератор, вызвав init_genrand()
с каким-то уникальным значением. В противном случае он будет использовать фиксированное начальное значение по умолчанию (в частности, 5489).
Простое значение для использования - текущее время:
init_genrand(time(NULL));
Не вызывайте это более одного раза во время вашей программы, иначе вы перезапустите последовательность!