문제

나는 사용하려고한다 C ++ STD TechnicalReport1 정규 분포 후 숫자를 생성하기위한 확장자이지만이 코드 ( 이 기사):

mt19937 eng;
eng.seed(SEED);

normal_distribution<double> dist;
// XXX if I use the one below it exits the for loop
// uniform_int<int> dist(1, 52);

for (unsigned int i = 0; i < 1000; ++i) {
  cout << "Generating " << i << "-th value" << endl;
  cout << dist(eng) << endl;
}

1 "생성 ..."로그 메시지 만 인쇄합니다. for 루프를 나가지 마십시오! 대신 댓글을 달아 놓은 분포를 사용하면 종료되므로 내가 무엇을 잘못하고 있는지 궁금합니다. 아이디어가 있습니까?

정말 감사합니다!

도움이 되었습니까?

해결책

이것은 분명히 프로그램을 걸지 않을 것입니다. 그러나 그것이 당신의 요구를 실제로 충족시키는 지 확실하지 않습니다.

 #include <random>
 #include <iostream>

 using namespace std;

 typedef std::tr1::ranlux64_base_01 Myeng; 

 typedef std::tr1::normal_distribution<double> Mydist; 

 int main() 
 { 
      Myeng eng; 
      eng.seed(1000);
      Mydist dist(1,10); 

      dist.reset(); // discard any cached values 
      for (int i = 0; i < 10; i++)
      {
           std::cout << "a random value == " << (int)dist(eng) << std::endl; 
      }

 return (0); 
 }

다른 팁

나는 원래 게시하고 GNU 구현을 조사한 코드와 동일한 문제를 겪었습니다.

먼저 일부 관찰 : G ++ -4.4 및 코드 사용중인 코드는 g ++ -4.5와 함께 -std = c ++ 0x (예 : TR1이 아니라 실제)를 사용하여 코드를 사용합니다. 공장

IMHO, 무작위 숫자 생성과 임의 숫자의 소비 사이의 어댑터와 관련하여 TR1과 C ++ 0X 사이의 변화가있었습니다. MT19937은 정수를 생성하고, 정상_Distribution은 복식을 소비합니다.

C ++ 0X는 적응을 자동으로 사용하지만 G ++ TR1 코드는

G ++ -4.4 및 TR1과 함께 코드를 작동 시키려면 다음을 수행하십시오.

std::tr1::mt19937 prng(seed);
std::tr1::normal_distribution<double> normal;
std::tr1::variate_generator<std::tr1::mt19937, std::tr1::normal_distribution<double> > randn(prng,normal);
double r = randn();

TR1 Random Number Generation 구현이 버기 인 경우 다음과 같이 자신의 일반 생성기를 작성하여 TR1을 피할 수 있습니다.

신뢰할 수있는 임의의 생성기를 사용하여 2 개의 균일 (0, 1) 랜덤 샘플 U 및 V를 생성합니다. 그런 다음 r = sqrt (-2 log (u))와 x = r sin (2 pi v)을 반환하십시오. (이것은 Box-Mueller 메소드라고합니다.)

평균 MU 및 표준 편차 시그마가있는 정상 샘플 샘플이 필요한 경우 x 대신 Sigma*X + MU를 반환하십시오.

이것은 버그 인 것처럼 보이지만 빠른 확인은 기본 0.0, 1.0 매개 변수를 전달하는 것입니다. normal_distribution<double>::normal_distribution() 동일해야합니다 normal_distribution<double>::normal_distribution(0.0, 1.0)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top