Wie erzeuge ich eine Zufallszahl mit der C ++ 11 Standardbibliothek?
Den neuen C++11-Standard hat ein ganzes Kapitel gewidmet-Zufallszahlen-Generatoren. Aber wie führe ich die einfachste, am häufigsten die Aufgabe, die codiert werden, wie diese, aber ohne Rückgriff auf die standard-C-Bibliothek:
srand((unsigned int)time(0)); int i = rand();
Gibt es sinnvolle Voreinstellungen für die random-Nummer, Motoren, Verteilungen, und die Samen, die man nutzen könnte aus der box?
InformationsquelleAutor der Frage Bartosz Milewski | 2011-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein, etwas zu tun:
Die Qualität der
default_random_engine
ist von der Implementierung abhängig. Sie können auchstd::min_rand0
oderstd::min_rand
.Wahrscheinlich einen besseren Weg, um Samen eine zufällige Motor ist mit als wahre eine zufällige Zahl, da ist von der Umsetzung eher als
time
.E. g.
InformationsquelleAutor der Antwort CB Bailey
Vereinheitlichung und Vereinfachung einige der Proben bereits vorausgesetzt, ich werde zusammenfassen:
Dann lief ich einige tests, um zu sehen, was die Standardeinstellungen Aussehen:
Erzeugt die Ausgabe:
So, wie wir sehen können, mt19937 und default_random_engine verschiedene Standard-Palette, so uniform_int_distribution empfohlen.
Auch, Standard uniform_int_distribution [0, max_int] (nicht-negativen), auch wenn Sie eine vorzeichenbehaftete Ganzzahl-Typ. Müssen Angebot ausdrücklich wenn Sie wollen die volle Palette.
Schließlich seine wichtig zu erinnern, diese in Zeiten wie diesen.
InformationsquelleAutor der Antwort mmocny
Wenn der vorhandene code angebracht wurde, bevor der neue standard ist, dann wird es auch weiterhin sein. Die neue Zufallszahlen-Generatoren wurden Hinzugefügt, für Anwendungen, die eine höhere Qualität der pseudo-Zufälligkeit, z.B. stochastische simulation.
InformationsquelleAutor der Antwort David Heffernan
Ich verwende den folgenden code in meinem Projekt. 'engine' und 'Verteilung' kann eines der von der Bibliothek bereitgestellten.
InformationsquelleAutor der Antwort dimitri
Hier gehen Sie. Random doubles in einer Reihe:
InformationsquelleAutor der Antwort Carl
Random number generation ist ein schwieriges problem. Es gibt keine wirklich zufällige Art und Weise, es zu tun. Wenn Sie nur generieren Zufälligkeit Samen eine Spiel-Umgebung, dann ist dein Ansatz in Ordnung sein sollte. rand() hat mehrere Mängel.
Wenn Sie benötigen, Zufälligkeit zu generieren Verschlüsselungsschlüssel, dann sind Sie S. O. L. Der beste Weg in diesem Fall ist zu gehen, um das Betriebssystem, die in der Regel-Mechanismus. Auf POSIX, dass die random () - (oder Lesen aus /dev/random wenn Sie so entsorgt). Unter Windows können Sie mithilfe der CryptoAPI:
https://www.securecoding.cert.org/confluence/display/seccode/MSC30-C.+Do+not+use+the+rand%28%29+function+for+generating+pseudorandom+numbers
InformationsquelleAutor der Antwort Adam Hawes
Könnte man RC4 verwendet zum generieren von zufälligen bytes. Dies hat wohl die Eigenschaften, die Sie wollen. Es ist schnell und relativ einfach zu implementieren. Die Sequenz wiederholbar über alle Implementierungen, wenn der seed bekannt ist, und völlig unvorhersehbar ist, wenn der Samen ist nicht bekannt. http://en.wikipedia.org/wiki/RC4
InformationsquelleAutor der Antwort Matt Mahoney