2011-12-24 5 views
0

메르 센 트위스터를 사용하여 c에서 임의의 숫자 (0과 1 사이)를 생성하고 싶습니다.메르 센 트위스터를 사용한 C의 난수 생성

루프에 대한 임의의 숫자의 각 반복에서
for (i=1; i<=10;i++){ 
    srand(time(NULL)); 
    a=rand(); 
    b=rand(); 
    c=rand(); 
} 

즉, 현재 시간과 시드되며,이 씨와 내가 사용이 작업을 수행하는 방법을 0과 1 사이의 3 개 난수를 생성합니다 다음과 같이 내 코드는 메르 센 트위스터?

+1

기본적으로 [Wikipedia article] (http://en.wikipedia.org/wiki/Mersenne_twister#Pseudocode)에 샘플 코드가 있습니다. –

+0

Wikipedia 답변과 해당 답변의 예제 코드보다 더 많은 정보가 필요하십니까? – Mark

+0

코드에서 임의의 숫자를 0에서 1 사이의 숫자로 계산하는 방법은 무엇입니까? 그들은 그렇지 않습니다! – pmg

답변

7

자주 RNG를 다시 시드하는 것이 좋지 않은 것처럼 보입니다. 대부분의 경우 동일한 시간 소인으로 매번 시드하므로 루프 반복마다 동일한 3 개의 난수가 생성됩니다. 오히려 한 번 시드 한 다음 사용해야합니다.

메르 센 트위스터의 C 구현은 here입니다.

+0

나는 시스템을 시뮬레이션하고있다. for 루프의 각 반복은 시스템의 하나의 실행 (또는 샘플)입니다. 나는 샘플을 독립적으로 만들고 싶다. 그래서 각 반복마다 다른 값을 가진 RNG를 시드하려고합니다. –

+7

매번 동일한 값으로 PRNG를 다시 시드하여 의도를 뒤엎고 있습니다. 시간을 사용하고자한다면'time()'과 같이 초 단위가 아닌 나노초 단위의 정보를 사용해야합니다. 그럼에도 불구하고, 당신은 씨앗이 다르기에 충분한 시간이 경과되었는지 확인해야합니다. –