2011-12-24 2 views
0

Я хочу генерировать случайные числа (между 0 и 1) в c, используя Mersenne twister. Мой код выглядит следующим образом:Генерация случайных чисел в C с использованием Mersenne twister

for (i=1; i<=10;i++){ 
    srand(time(NULL)); 
    a=rand(); 
    b=rand(); 
    c=rand(); 
} 

т.е. в каждой итерации цикла для случайных чисел будут посеяны с текущим временем и с этим семенем я генерировать 3 случайных чисел в диапазоне от 0 до 1. Как сделать это с помощью mersenne twister?

+1

Существует, по существу, пример кода в [статье Википедии] (http://en.wikipedia.org/wiki/Mersenne_twister#Pseudocode). –

+0

Что вам больше нужно, чем ответ Википедии и пример кода, на который он указывает? – Mark

+0

Как вы оцениваете случайные числа из кода от 0 до 1? Это не так! – pmg

ответ

7

Непонятно, что вы часто заново засеиваете свой RNG. Скорее всего, вы каждый раз высеваете его с одинаковой временной меткой, и в этом случае вы получите одинаковые 3 случайных числа на каждой итерации цикла. Вы должны скорее посеять один раз, а затем использовать это.

C-реализация Mersenne Twister доступна here.

+0

Я имитирую систему. Каждая итерация цикла for - это один пробег (или выборка) системы. Я хочу сделать выборки независимыми. Вот почему я хочу, чтобы семена RNG были разными значениями на каждой итерации. –

+7

. Вы подрываете свое намерение, каждый раз повторяя PRNG с одинаковым значением. Если вы собираетесь использовать время, вам нужно будет использовать то, что содержит наносекунды информации, а не целые секунды, такие как 'time()'. Даже тогда вам нужно убедиться, что прошло достаточно времени, чтобы семена были разными. –

Смежные вопросы