Wenn Sie denselben Zufallsgenerator mit demselben Seed und demselben Startwert verwenden Sequenz, werden die Ergebnisse die gleichen sein. Ein Computer ist nun einmal, deterministisch in seinem Verhalten (abgesehen von Threading-Problemen und ein paar anderen Unwägbarkeiten).
Wenn Sie keinen Generator angeben, ist der Standardgenerator Implementierung definiert. Die meisten Implementierungen verwenden, glaube ich, die std::rand()
(was zu Problemen führen kann, insbesondere wenn die Anzahl der Elemente in der Sequenz größer ist als RAND_MAX
). Ich würde empfehlen einen Generator mit bekannter Qualität zu kaufen und ihn zu verwenden.
Wenn Sie den verwendeten Generator nicht korrekt seeden (eine weitere Grund, nicht die Standardeinstellung zu verwenden, da die Art des Seeds von der Implementierung abhängt), dann bekommen Sie, was Sie bekommen. Im Fall von std::rand()
verwendet die Standardeinstellung immer denselben Seed. Wie Sie den Seed hängt von dem verwendeten Generator ab. Was Sie zum Seeden verwenden, sollte sich von einem Lauf zum anderen variieren; für viele Anwendungen, time(NULL)
ist ausreichend; auf einer Unix-Plattform würde ich empfehlen, so viele Bytes zu lesen, wie es zu lesen, die es von /dev/random
. Andernfalls wird das Hashing anderer Informationen (IP Adresse des Rechners, Prozess-ID usw.) kann die Dinge auch verbessern - es bedeutet, dass zwei Benutzer, die das Programm in genau der gleichen Sekunde starten starten, trotzdem unterschiedliche Sequenzen erhalten werden. (Aber das ist wirklich nur relevant wenn Sie in einer vernetzten Umgebung arbeiten.)