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));

Не вызывайте это более одного раза во время вашей программы, иначе вы перезапустите последовательность!

Другие вопросы по тегам