[closed/solved] Kann mir wer Boost.Random erklären?
-
Oder erklären wieso das folgende immer die gleichen Ergebnisse liefert:
#include <ctime> #include <cstdlib> #include <iostream> int main() { std::srand(std::clock()); for(int i = 0; i < 1000; ++i) { std::cout << std::rand() << ' ' << std::endl; } return 0; }Ich bekomme aus irgendeinem mir unerklärlichen Grund immer die gleichen tausend verschiedenen Zahlen raus. Zudem sind diese tausend verschiedene mir zu wenig verschieden.
Daher wollte ich Boost.Random benutzen, doch die Dokumentation dazu scheint mir miserabel zu sein oder ich versteh einfach kein Wort. Kann mir jemand sagen, wie ich einfach ein paar zufällige Integers mit Boost.Random bekommen kann? Am besten auch positiv und negativ, wenn es geht.
Danke im voraus.
Grüssli
-
std::srand(std::clock());ahm clock() ist die falsche funktion.
das muss
std::srand(std::time(null));heissen.
clock gibt nur die bisherige programmlaufzeit aus, nicht die aktuelle zeit. Das erklärt, warum du immer dieselben Ergebnisse heraus bekommen hast.
Und wo ist nun *genau* dein Problem mit boost::random? ist doch recht schön erklärt.
-
otze schrieb:
ahm clock() ist die falsche funktion.
das muss
std::srand(std::time(null));heissen.
clock gibt nur die bisherige programmlaufzeit aus, nicht die aktuelle zeit. Das erklärt, warum du immer dieselben Ergebnisse heraus bekommen hast.
Das erklärt so einiges

Kenne mich zu wenig mit den C-Funktionen aus, noch ein Grund mehr auf die C++ Funktionen, bzw. Boost zu setzen.otze schrieb:
Und wo ist nun *genau* dein Problem mit boost::random? ist doch recht schön erklärt.
Recht schön? Entweder les ich die falsche Dokumentation oder wir haben unterschiedliche Ansichten was schön ist

Ich sehe drei Dinger in der Dokumentation, eine Schnelleinführung, eine Dokumentation des Konzepts und Code-Referenzen.Beginnen wir mit der Schnelleinführung, welche nur aus einem Programmcode besteht, der für mich extrem unverständlich ist. Zumindest verstehe ich das Konzept nicht, wie es funktionieren soll.
Also auf zur Dokumentation über das Konzept, welches ich irgendwie nicht verstehe. Ich bekomme irgendwie nicht den Zusammenhang raus, wie ich was mit was kombinieren muss um meine Ergebnisse zu erhalten.
Die Code-Referenz bringt mir dann auch nichts mehr

Also ganz einfach, ich versteh das Konzept von Boost.Random nicht.
Danke.
Grüssli
-
Vielleicht hilft dies:
-
//der Algorithmus (hier der Mersenne Twister Algo) boost::mt19937 generator; //Gleichverteilte Ganzzahlen zwischen -50 und 50 boost::uniform_int<int> distrubution(-50,50); //der Generator, erzeugt gleichverteilte Ganzahlen -50..50 mit dem MT-Algo boost::variate_generator<boost::mt19937, boost::uniform_int<int> > rand(generator, distrubution); for(int i = 0; i < 20; ++i) { std::cout << rand() << '\n'; }
-
Danke!
Ich weiss zwar nicht wieso, aber irgendwie hat sich der Knopf gelöst und es wurde mir so klar, dass es mir fast peinlich ist überhaupt die Frage gestellt zu haben
Die Sache ist so einfach aufgebaut, aber irgendwie hatte ich es nicht geschnallt.
Hab mir nun daraus meine eigene Random-Klasse (Wrapper) gebaut und das funktioniert alles super perfekt, genau wie ich es wollte. Endlich kann ich meine Whitebox-Tests fortführen.
////////////////////////////////////////////////////////////////////////// // CRandom template<typename TValue> class CRandom { // Attributes // private: boost::variate_generator<boost::mt19937, boost::uniform_int<TValue>> m_Generator; // Constructors & Destructor // public: CRandom(TValue Min, TValue Max) : m_Generator(boost::mt19937(), boost::uniform_int<TValue>(Min, Max)) { } ~CRandom() { }; // Methods // public: TValue get_next_value() { return m_Generator(); }; };Grüssli