제목으로 제안됩니다 난수 생성 알아내려 하고, 나는 ',' 새로운 방법을 사용하여, C++11 < random> 라이브러리란. 나도 날잡아 it 대체하십시오 코드:
std::default_random_engine generator;
std::uniform_real_distribution<double> uniform_distance(1, 10.001);
문제는 내가 그것을 할 때마다 나는 는 코드 컴파일하십시오 생성하는지 실행하십시오 항상 같은 번호를. 그래서 내 질문은 어떤 다른 기능을 수행할 수 있는 이 중에는 무순서 라이브러리란 진정한 임의적입니까?
I was trying to get a 값을 특정 범위 내의 览侩 荤례, 내 ' [1, 10]'
슈테판 T. 라바웨차 잘 한 것 (stl) Microsoft 에서 새로운 기능 및 왜안돼요 의논하십시오 emc. 넷윈을 사용 방법에 대한 C++11 임의적입니까 사용할 수 있는 '랜드 ()'. 그는 기본적으로 포함되어 있는 항목이없습니다 슬라이드에서는 질문 한 번에 해결할 수 있습니다. # 39 의 슬라이드에서는 i&, ve 복사됨 코드는 아래와 같습니다.
여기서 그의 전체 의논하십시오 볼 수 있습니다. http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
#include <random>
#include <iostream>
int main() {
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<double> dist(1.0, 10.0);
for (int i=0; i<16; ++i)
std::cout << dist(mt) << "\n";
}
우리가 사용하는 '이' 한 번 random_device 시드입니다 난수 생성기 이름이 'mt'. 'random_device ()' 가 '시드' 보다 느린 것은 아니지만 mt19937 필요가 있기 때문에 데이터가 임의적입니까 요청률 (운영 체제 (소스 등 다양한 위치에서 하는 것 [드런드] (http://en.wikipedia.org/wiki/RdRand) 예).
[이 질문 / 답변] 보고 (https://stackoverflow.com/questions/16224446/stduniform-real-distribution-inclusive-range) '사이의 숫자를 되돌려줍니다 uniform_real_distribution 것으로 보인다', ' [a, b)', where you want ' [a, b]'. 이를 위해 '우리' uniform_real_distibution /dev/raw/raw200 실제로 다음과 같습니다.
std::uniform_real_distribution<double> dist(1, std::nextafter(10, DBL_MAX));
예를 들면 다음과 같다:
자동 발 = 임의적입니까 확보하십시오. (10, 10). 정수 // 자동 발 = 임의적입니까 확보하십시오. (10.f, - 10.f); 부동 소수점 지점임 //
자동 발 = Random::get< bool> 50%, () / / 발령합니다 flashcopy. 자동 발 = Random::get<; (0.7) / / 발령합니다 flashcopy bool> 70%
자동 발 = 임의적입니까 확보하십시오. (} {1, 3, 5, 7, 9). // 발 = 1 또는 3 또는.
자동 it = 임의적입니까 확보하십시오. (베c베긴 (), 베c런드 ()); 이 = 임의적입니까 반복자가 // 자동 it = 임의적입니까 확보하십시오. (vec); 복귀하십시오 임의적입니까 반복자가 //
심지어 더 많은 것을! 깃허브 체크아웃합니다 페이지:
#include <random>
#include <chrono>
#include <thread>
using namespace std;
//==============================================================
// RANDOM BACKOFF TIME
//==============================================================
class backoff_time_t {
public:
random_device rd;
mt19937 mt;
uniform_real_distribution<double> 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;
}
~
다음은 일부 리소스에는 dtep 임의적입니까 번호임 발생기입니다 읽을 수 있습니다.
https://en.wikipedia.org/wiki/Pseudorandom_number_generator
기본적으로 필요한 컴퓨터 난수 시드입니다 (이 수치는 현재 시스템 시간을 될 수 있습니다).
복귀시킴
std::default_random_engine generator;
의해
std::default_random_engine generator(<some seed number>);
#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++컴파일러는 틀렸다니까 링크하려는.