ich eine Klasse erstellt MyRandom
eine Matrize auf eine gleichmäßige Verteilung zu rollen, da der Bereich als Eingang:C++ - Boost: Gleiche Zufallszahl erhalten. Seeding scheint nicht
MyRandom.cpp
#include "MyRandom.h"
MyRandom::MyRandom(){
gen.seed(static_cast<unsigned int>(std::time(0)));
}
int MyRandom::die(int min, int max){
boost::uniform_int<> dist(min, max);
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > role(gen, dist);
int result = role();
role.engine().seed();
role.distribution().reset();
return result;
}
main.cpp
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
Ich bekomme immer die gleiche Nummer (außer die erste, so funktioniert mein Reset etwas). Offensichtlich säte ich das nicht richtig. Ich habe versucht, die reset()
wie vorgeschlagen here ohne Erfolg hinzuzufügen. Was vermisse ich?
Seed nur einmal, nicht jedes Mal, du bist eine Zufallszahl generieren. –
Es hat funktioniert. Ich missverstehe die Antwort aus der verknüpften Antwort. Es löste mein Problem für die aufeinander folgenden Anrufe, aber nicht das komplette Problem, ich muss meine Frage bearbeiten. –
Eigentlich habe ich es herausgefunden. Ich übergab ein Objekt MyRandom myRandom = MyRandom() nach Wert und nicht durch Verweis, was dazu führt, dass die Serie von Rollen identisch ist, weil es eine Kopie des Generators mit dem gleichen Seed war :) –