Boost random integer generator gibt immer gleichen Wert aus



  • Hi Leute,
    ich versuche gerade eine Funktion zu schreiben die mir eine zufällige Integer Zahl in einem bestimmten intervall liefert. Allerdings bekomme ich jedesmal die selbe Zahl, wenn ich die Funktion aufrufe. Mein code sieht so aus:

    #include <boost/random.hpp>
    
    using namespace std;
    
    using boost::mt19937;
    using boost::uniform_01;
    using boost::uniform_int;
    
    int irand(int n) {
    	mt19937 gen(time(NULL));
    	static uniform_int<> dist(0, n-1);
    return dist(gen);
    }
    
    double urand()
    {
    	mt19937 gen(time(NULL));
    	static uniform_01<mt19937> dist(gen);
    return dist();
    }
    

    Wobei die zweite Funktion eine reelle Zahl zwischen 0 und 1 ausgeben soll. Das ganze scheint auch zu funktionieren. Sieht jemand in der ersten Funktion ein Problem?

    Schon mal danke für die Hilfe

    Mackes


  • Mod

    Der Generator muss ebenfalls static sein. Sonst wird innerhalb einer Sekunde jedes mal der gleiche Seed gegeben.



  • Gibt es hier einen Grund für boost/random? Mit C++11 gibt es doch auch den "normalen" <random>-Header.

    Und zweite Bemerkung: time(NULL): warum nicht stattdessen random_device nutzen? Wird dein Programm mehrfach pro Sekunde gestartet?


Anmelden zum Antworten