2013-02-21 8 views
11

Sto cercando di utilizzare il seguente codice (tratto da Internet) per generare numeri dalla distribuzione binomiale. Compila ma una esecuzione si blocca. (Sto usando g ++ su mac.)Generazione del numero dalla distribuzione binomiale mediante C++ TR1

Qualcuno potrebbe suggerire un codice funzionante per generare numeri dalla distribuzione binomiale utilizzando le caratteristiche della libreria 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

Hai controllato in quale riga si blocca il programma? (Hai usato un debugger?) – Zeta

+0

Si blocca nella linea cout. Più precisamente chiamare 'roll (eng)' non sembra tornare. – kay

+0

Funziona bene con C++ 11 std :: binomial_distribution di clang (dopo aver rimosso l'argomento modello aggiuntivo), FYI –

risposta

1

Ecco il codice di funzionamento:

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

È possibile controllare il risultato here, e funziona con i recenti GCC e versioni Clang. Tieni presente che in genere è preferibile utilizzare il parametro random_device anziché il tempo per ottenere un seed.

Compilalo con --std=c++11.

Problemi correlati