2013-02-21 20 views
11

Próbuję użyć następującego kodu (pobranego z Internetu) do generowania liczb z rozkładu dwumianowego. Kompiluje się, ale jedna z jego realizacji wisi. (Używam g ++ na mac.)Generowanie liczby z rozkładu dwumianowego przy użyciu C++ TR1

Czy ktoś mógłby zaproponować działający kod do generowania liczb z dwumianowej dystrybucji przy użyciu funkcji biblioteki 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

Czy sprawdziłeś, w której linii zawiesza się twój program? (Czy używałeś debuggera?) – Zeta

+0

Zawiesza się w linii cout. Bardziej precyzyjne wywoływanie 'roll (eng)' nie powraca. – kay

+0

Działa dobrze przy użyciu języka C++ 11 std :: binomial_distribution (po usunięciu dodatkowego argumentu szablonu), FYI –

Odpowiedz

1

Tutaj jest kod działa:

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

Można sprawdzić swój wynik here i działa z najnowszej wersji GCC i brzękiem. Zauważ, że ogólnie lepiej jest użyć random_device zamiast czasu, aby otrzymać ziarno.

Skompiluj go z --std=c++11.

Powiązane problemy