我正在尝试使用 C++ STD TechnicalReport1 扩展名来生成遵循正态分布的数字,但是此代码(改编自this article):

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);
 }

10-08 03:48