11

次のコード (インターネットから取得) を使用して、二項分布から数値を生成しようとしています。コンパイルはしますが、1 回実行するとハングします。(Macでg ++を使用しています。)

C++ TR1 ライブラリ機能を使用して、二項分布から数値を生成する作業コードを誰かが提案できますか?

#include <tr1/random>
#include <iostream>
#include <cstdlib>

using namespace std;
using namespace std::tr1;

int main()
{
  std::tr1::mt19937 eng; 
  eng.seed(time(NULL));
  std::tr1::binomial_distribution<int, double> roll(5, 1.0/6.0);
  std::cout << roll(eng) << std::endl;
  return 0;
}
4

1 に答える 1

1

作業コードは次のとおりです。

#include <iostream>
#include <random>

int main() {
  std::random_device rd;
  std::mt19937 gen(rd());
  std::binomial_distribution<> d(5, 1.0/6.0);
  std::cout << d(gen) << std::endl;
}

その結果はこちらで確認でき、最近の GCC および Clang バージョンで動作します。通常、シードを取得する時間ではなく、random_device を使用する方がよいことに注意してください。

でコンパイルし--std=c++11ます。

于 2013-03-09T16:33:30.390 に答える