2017-10-27 24 views
0

그래서 코드를 실행할 때마다 어떤 이유로 든 49와 동일한 결과를 얻지 만 과부하 된 괄호 연산자를 사용하여 1에서 61 사이의 난수를 생성하려고합니다.범위 내에서 임의의 숫자 생성

여기에 내가 가진 무엇 :

double operator()() const { 
    std::uniform_int_distribution<int> _uniformIntDistribution(1, 61); 
    std::default_random_engine _generator; 

    double result;  
    result = _uniformIntDistribution(_generator); 

    return result; 
} 

확실히 내가 잘못 안 것. 어떤 제안?

미리 감사드립니다.

+0

글쎄, 같은 시작 시드를 사용하여 동일한 난수 생성기를 만들면 매번 무엇을 기대 했습니까? 난수 생성기 ***를 한 번 생성하고 매번 호출하면됩니다. –

+0

@SamVarshavchik 잠깐, 내가 씨앗을 어디에 놓고 있니? 나는 혼란스러워. 그것이 어디에 있든, 그것은 의도적으로 의도하지 않습니다. –

+0

@NomOnTheCookie ** 당신은 ** std :: default_random_engine의 시드를 설정할 수 없습니다 **. 귀하의 기본 생성 된'_generator' 기본 시드 – Caleth

답변

0

컴파일러는 컴파일 할 때마다 기본 시드를 사용하므로 동일한 난수 시퀀스를 갖게됩니다. 프로그램의 요구 사항과 숫자가 필요한 "무작위"방법에 따라 시스템 현재 시간 값을 시드로 사용할 수 있습니다. 그런 식으로 컴파일 할 때마다 임의의 엔진 출력이 변경됩니다. 여기에 링크가 있습니다 : Notice member function "seed"

+0

씨앗으로 시간을 사용하여 정말 나쁜 연습은하지 말아주세요 –

+0

그 책과 포럼에서 읽었습니다. 왜 나쁜지에 대해 자세히 설명해 주시겠습니까? 비슷한 질문을하는 사람들에게 도움이 될 것입니다. 고맙습니다. – Adler11th

+0

문제는 상당히 복잡합니다.하지만 최상의 시나리오에서도 충분히 "임의"가 아닌 숫자를 얻게됩니다. 자세한 내용은 [this] (http://www.pcg-random.org/predictability.html)를 참조하십시오. –