2012-03-05 4 views
0

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

+2

Я не думаю, что вы используете код правильно. PRNG обычно возвращают значение * next * для каждого вызова, аргумент (если присутствует для * масштабирования *). – dmckee

+0

Почему бы просто не использовать 'srand' с' rand' для установки семени и получить повторяющуюся псевдослучайную последовательность таким образом? –

+2

@Paul R: Возможно, OP хочет, чтобы последовательность повторялась в разных реализациях C. – caf

ответ

3

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

1

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

unsigned int my_seed = 42; 

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