2013-02-21 9 views
11

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

誰かが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; 
} 
+0

プログラムがハングする行をチェックしましたか? (デバッガを使用しましたか?) – Zeta

+0

これはcout行でハングします。より正確には 'roll(eng) 'を呼び出すことは返されないようです。 – kay

+0

clangのC++ 11 std :: binomial_distribution(追加のテンプレート引数を削除した後)を使用してうまく動作します。参考書 –

答えて

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

あなたは、その結果hereを確認することができ、そしてそれは、最近のGCCとクランのバージョンで動作します。一般的に、時間の代わりにrandom_deviceを使用してシードを取得する方が良いことに注意してください。

--std=c++11でコンパイルしてください。

関連する問題