C++11 임의적입니까 난수 생성 라이브러리를 사용하여

제목으로 제안됩니다 난수 생성 알아내려 하고, 나는 ',' 새로운 방법을 사용하여, C++11 &lt random&gt 라이브러리란. 나도 날잡아 it 대체하십시오 코드:

std::default_random_engine generator;
std::uniform_real_distribution<double> uniform_distance(1, 10.001);

문제는 내가 그것을 할 때마다 나는 는 코드 컴파일하십시오 생성하는지 실행하십시오 항상 같은 번호를. 그래서 내 질문은 어떤 다른 기능을 수행할 수 있는 이 중에는 무순서 라이브러리란 진정한 임의적입니까?

I was trying to get a 값을 특정 범위 내의 览侩 荤례, 내 ' [1, 10]'

질문에 대한 의견 (8)
해결책

슈테판 T. 라바웨차 잘 한 것 (stl) Microsoft 에서 새로운 기능 및 왜안돼요 의논하십시오 emc. 넷윈을 사용 방법에 대한 C++11 임의적입니까 사용할 수 있는 '랜드 ()'. 그는 기본적으로 포함되어 있는 항목이없습니다 슬라이드에서는 질문 한 번에 해결할 수 있습니다. # 39 의 슬라이드에서는 i&, ve 복사됨 코드는 아래와 같습니다.

여기서 그의 전체 의논하십시오 볼 수 있습니다. http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful


#include 
#include 

int main() {
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_real_distribution dist(1.0, 10.0);

    for (int i=0; i
해설 (9)

39, & # 39 random& 내. 높은 편리한 주위에서 래퍼 라이브러리 제공하십시오 C++11 임의적입니까 클래스뿐만. # 39, & # 39 를 통해 간단한 get& 거의 모든 것을 할 수 있습니다. 메서드입니다.

예를 들면 다음과 같다:

  1. 난수 범위를

자동 발 = 임의적입니까 확보하십시오. (10, 10). 정수 // 자동 발 = 임의적입니까 확보하십시오. (10.f, - 10.f); 부동 소수점 지점임 //

  1. 임의적입니까 부울을

자동 발 = Random::get&lt bool&gt 50%, () / / 발령합니다 flashcopy. 자동 발 = Random::get<; (0.7) / / 발령합니다 flashcopy bool&gt 70%

  1. 임의의 값이 std::initilizer_list 에서

자동 발 = 임의적입니까 확보하십시오. (} {1, 3, 5, 7, 9). // 발 = 1 또는 3 또는.

  1. 모든 컨테이너입니다 충스러웠으니 반복자가 범위 또는 무순서 반복자가

자동 it = 임의적입니까 확보하십시오. (베c베긴 (), 베c런드 ()); 이 = 임의적입니까 반복자가 // 자동 it = 임의적입니까 확보하십시오. (vec); 복귀하십시오 임의적입니까 반복자가 //

심지어 더 많은 것을! 깃허브 체크아웃합니다 페이지:

https://github.com/effolkronium/random

해설 (2)

39 의 here& 생각하신거야 내가 단지 그 선 함께 썼다.

#include 
#include 
#include 

using namespace std;

//==============================================================
// RANDOM BACKOFF TIME
//==============================================================
class backoff_time_t {
  public:
    random_device                      rd;
    mt19937                            mt;
    uniform_real_distribution  dist;

    backoff_time_t() : rd{}, mt{rd()}, dist{0.5, 1.5} {}

    double rand() {
      return dist(mt);
    }
};

thread_local backoff_time_t backoff_time;

int main(int argc, char** argv) {
   double x1 = backoff_time.rand();
   double x2 = backoff_time.rand();
   double x3 = backoff_time.rand();
   double x4 = backoff_time.rand();
   return 0;
}

~

해설 (0)

다음은 일부 리소스에는 dtep 임의적입니까 번호임 발생기입니다 읽을 수 있습니다.

https://en.wikipedia.org/wiki/Pseudorandom_number_generator

기본적으로 필요한 컴퓨터 난수 시드입니다 (이 수치는 현재 시스템 시간을 될 수 있습니다).

복귀시킴

std::default_random_engine generator;

의해

std::default_random_engine generator();
해설 (0)

39, ve got you& 2 개의 일반적인 상황. # 39, 첫 번째 에로남이네 운영까지도 난수 및 aren& 대한 품질 또는 실행 속도가 너무 법석을 떨게하는 없다. 이 경우, 아래 매크로

#define uniform() (rand()/(RAND_MAX + 1.0))

p 수 있는 범위는 0 부터 1 - 엡실론 (않으면 RAND_MAX 는 보다 큰 걱정할 수 있지만, 이 경우 두 번 정밀도가 따라오렴).

int (uniform () * N) = x (int);

이제 임의의 정수 N - 1 을 제공합니다.

필요한 경우, 당신은 다른 분포를 변형하려면 p. # 39 의 균일 () 또는 때때로 it& 간소화하는지 여러 차례 불러.

그렇지 않으면 시드입니다 반복시킬 스케쳐내 행동, 일정한 시간 () 와 함께 시드입니다 전화로.

이제 유니폼 () 또는 런타임 성능, 품질 재작성할 경우 대한 괴롭혔다. 하지만 그렇지 않으면 don& # 39, t touch the 코드입니다. 항상 0 에서 1 렉시한테서 유니폼 () 를 뺀 엡슬런 (e). 이제 더 나은 균일 () 이지만, 난수 생성 라이브러리를 잡기 c++컴파일러는 that& # 39 의 옵션을 일종의 중간 수준. # 39 의 경우, s 도 특성에 관한 괴롭혔다 유사환 관심용 it& 투자 가치가 조금 이해하기 위해 시간 작업 후 제공하십시오 기본 방법 1. 그래서 you& # 39, ve got 완벽하게 제어할 수 있을지 장담할 수 있는 코드, 진실이며당신이 와 동일한 시드입니다, e0100042.log 항상 똑같은 플랫폼에 상관없이, 어떤 버전의 c++컴파일러는 틀렸다니까 링크하려는.

해설 (2)