나는 메르 센 트위스터 PRNG를 실행되는 코드의 짧은 조각을 가지고 있고 그것을 잘 작동합니다 :함수 내에서 Mersenne Twister를 실행하는 방법은 무엇입니까?
는std::random_device randDev;
std::mt19937 twister(randDev());
std::uniform_int_distribution<int> dist(0,99);
for (int i = 0; i < 10; i++) {
std::cout << dist(twister) << std::endl;
}
이 10 개 임의의 숫자를 출력합니다. 그러나 정확히 같은 코드를 함수에 넣으면 :
#include <random>
int getRand(const int& A, const int& B) {
std::random_device randDev;
std::mt19937 twister(randDev());
std::uniform_int_distribution<int> dist(A,B);
return dist(twister);
}
int main() {
for (int i = 0; i < 10; i++) {
std::cout << getRand(0,99) << std::endl;
}
return 0;
}
같은 번호를 10 번 출력합니다. 저는 C++로 시작했습니다. 그래서이 문제의 원인이나 문제 해결 방법을 모릅니다.
편집 : 문제는 std :: random_device에 있습니다. Eclipse C++ IDE (Luna 버전) 또는 MinGW 4.8.1의 버그 일 수 있지만 임의의 이유는 무엇이든간에 항상 동일한 숫자입니다. 나는 시간 (0)이 내 용도에 적합한 씨앗이 될 것이라고 믿습니다.
EDIT 2 : T.C.의 제안을 고려하고 시간 (0)이 여전히 같은 수의 열을 발생 시킨다는 사실은 지금까지 최종 코드입니다. 나는 rand()가 나쁘다는 것을 알지만 작동합니다.
#include <iostream>
#include <random>
std::mt19937 twister(rand());
int getRand(const int& A, const int& B) {
std::uniform_int_distribution<int> dist(A,B);
return dist(twister);
}
int main() {
for (int i = 0; i < 10; i++) {
std::cout << getRand(0,99) << std::endl;
}
return 0;
}
어떤 컴파일러를 사용하고 있습니까? 이것은'g ++ - 4.9'를 사용하여 나에게 잘 맞습니다. – user14717
첫 번째 경우에는 항상 임의의 값 순서를 얻습니까? – didierc
저는 MinGW를 사용합니다. 실제로 제가 확인한 바로는, 첫 번째 코드에서 각각 동일한 10 개의 난수를 얻습니다. –