Mit boost::random und immer dieselbe Sequenz von zahlen

Ich habe den folgenden code:

Class B {

void generator()
{
    //creating random number generator
    boost::mt19937 randgen(static_cast<unsigned int>(std::time(0)));
    boost::normal_distribution<float> noise(0,1);
    boost::variate_generator<boost::mt19937, 
        boost::normal_distribution<float> > nD(randgen, noise);


    for (int i = 0; i < 100; i++)
    {
        value = nD();
        //graph each value
    }
}
};

Class A {

void someFunction()
{
    for(int i = 1; i <=3; i++)
    {
        std::shared_ptr<B> b;
        b.reset(new B());
        b->generator();
    }
}
};

Ich möchten, führen Sie den obigen code mehrere Male in schneller Folge zu produzieren, die mehrere Diagramme. Ich habe auch überprüft diese stackoverflow-Frage, die ist ähnlich, aber der VORBEHALT besagt, dass wenn die Zeit(0) verwendet wird und die member-Funktion heißt in rascher Folge, dann werden Sie wahrscheinlich immer noch erhalten die gleiche Sequenz von zahlen.

Wie könnte ich dieses problem umgehen?

EDIT: ich habe versucht, randgen statisch in der Klasse B, auch versucht, so dass es eine Globale variable in der Klasse A, aber jedes mal die 3 Grafiken sind immer noch die gleichen. Ich habe auch versucht das seeding von der GetSystemTime Millisekunden. Ich muss etwas fehlen.

Wenn es einen guten Grund, Sie zu verwenden, mt19937, anstatt einfach mit der Funktion " rand(), dann kann es ein guter Grund, um eine anständige Samen, auch. Es gibt web-services, die einen wirklich zufälligen Daten, sowie hardware, die Sie kaufen können. Könnten Sie diejenigen, die als Samen (in regelmäßigen Abständen), und verwenden Sie den PRNG, um Zeit zu sparen/Wartezeit zwischen re-Samen. en.wikipedia.org/wiki/...
Ich muss fehlt etwas - die Bearbeitung der Frage geben, größeres Bild.

InformationsquelleAutor Seth | 2010-02-03

Schreibe einen Kommentar