2014-10-23 5 views
0

WELL PRNG의 특정 구현을 사용하려고합니다. 원본보다 좋을 것 같습니다. link to the codeWELL PRNG가 작동하지 않습니까? (아마)

그러나 나는 그것으로 몇 가지 갈등을 겪고 있습니다. 아무리 씨를 뿌려도 똑같은 숫자가 출력됩니다. 나는 아마 그것을 잘못 사용하고 있다고 생각하지만 내 실수를 알아낼 수는 없었다. 불행히도 PRNG 소스는 완전히 불투명합니다.

내 코드 : 주석 점잔 빼는-ossifrage을 바탕으로

#include <iostream> 
#include <WELL44497a_new.h> 

void pause() 
{ 
    std::string dummy; 
    std::cout << "Press enter to continue..."; 
    std::getline(std::cin, dummy); 
} 

int main(int argc, char** argv) { 
    using std::cout; 
    using std::cin; 
    using std::endl; 
    cout<<"Hello"<<endl; 
    pause(); 
    unsigned int rngseed; 
    cout<<"Input RNG seed:"; 
    cin>>rngseed; 
    cout<<"The RNG seed is:"; 
    cout<<rngseed<<endl; 
    pause(); 
    InitWELLRNG44497(&rngseed); 
    int i=1; 
    for (i;i<100;i++){ 
     unsigned long rngtest=WELLRNG44497(); 
     cout<<rngtest<<endl; 
    } 
    pause(); 
    return 0; 
} 
+4

잘 경우 [이] (http://www3.ocn.ne.jp/~harase/WELL44497a_new.c) 당신이 사용하고있는 코드이며, 다음'InitWELLRNG44497 (: 다음 코드는 작업 표시)'는 단지 하나의 int * 포인터가 아니라 1391 개의 int 값 배열을 필요로합니다. 어쩌면 그것과 관련이 있습니다. –

+0

@ squeamish-ossifrage 당신은 강타당했습니다! 입력에서 배열을 생성하기 위해 코드를 변경했는데 이제는 작동하는 것처럼 보입니다. 감사. 만약 당신이 대답이 아닌 대답으로 게시했다면 나는 대답을했습니다. – uLoop

답변

1

나는 코드를 수정했다.

... 
cin>>rngseed; 
cout<<"The RNG seed is:"; 
cout<<rngseed<<endl; 
pause(); 
unsigned int rngseed_arr[1391]; 
int i=0; 
for (i;i<1391;i++){ 
    rngseed_arr[i]=rngseed+i; 
} 
InitWELLRNG44497(rngseed_arr); 
i=1; 
...