Нужна помощь в преобразовании твистера C Mersenne, чтобы он мне пригодился - PullRequest
0 голосов
/ 05 марта 2012

Я использую эту реализацию твистера Мерсенна для генератора местности с ромбовидным квадратом, который я пишу. Смысл использования отдельной реализации, а не встроенной функции rand (), заключается в том, что я хочу, чтобы одно и то же начальное число каждый раз создавало одну и ту же карту. Алмазный квадрат требует добавления случайной ошибки к каждому пикселю, поэтому мне нужно генерировать много-много случайных чисел из одного семени. Для этого подойдет Mersenne Twister, но, насколько я могу судить, эта реализация генерирует только одно случайное число. Я заменил rand () в mt_init () на целочисленный аргумент. Тем не менее, я не могу больше описывать этот код, поэтому я должен обратиться к вам, чтобы спросить: какие шаги я должен предпринять, чтобы mt_random (n) вернул n-е случайное число в ряду твёрдых звёзд Мерсенна, которое оно выдает?

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Если вам нужно больше случайных чисел, просто продолжайте звонить mt_random столько раз, сколько хотите.

1 голос
/ 05 марта 2012

Я бы пересмотрел использование rand и srand.Если вам нужна отдельная случайная функция, состояние которой не зависит от обычных вызовов rand, вы можете использовать что-то вроде этого.

unsigned int my_seed = 42;

int my_rand()
{
    srand(my_seed);
    return my_seed = rand();
}
...