Warum müssen wir ' srand (Zeit (NULL)) ' zum Generieren von Zufallszahlen in C ++?


Beste Antwort

Ich kann keine bessere Antwort geben, als Abhilash Gangadharan angegeben hat. Die Funktion „srand ()“ des Standards Die C-Bibliothek initialisiert mehrere Werte, die der Pseudozufallsalgorithmus benötigt, um eine semi-eindeutige Ausgabe zu generieren.

In einigen älteren Generatoren wurde der Wert direkt zum Start des Systems verwendet, da sie beispielsweise Modulo-Prime ausführten Mathematik mit einigen Rückmeldungen von der zuletzt generierten Zahl, um der Berechnung „Entropie“ hinzuzufügen und das Ergebnis zufällig erscheinen zu lassen. Moderne Algorithmen (wie der etwas berühmte „Mersenne Twister“) haben ein ähnliches Rückkopplungssystem, das jedoch anders verwendet wird um eine größere Menge an Entropie bereitzustellen, wodurch die Folge von generierten Zahlen eine größere Anzahl statistischer Tests auf Zufälligkeit besteht.

Das Setzen des PRNG mit einem bestimmten Wert sollte immer zu genau der gleichen Ausgabe führen – Daher, wenn ich in einem Code „srand (12345)“ aufrufe und auf 14D „231,4492,2131“ generiert EC2015 kann ich am 14DEC2016 genau das gleiche Ergebnis erzielen. (Dies wird in einigen Teilen der Kryptographie tatsächlich verwendet, um einigen Algorithmen mehr Sicherheit zu verleihen, wenn ich mich richtig an meine Forschung erinnere.)

Antwort

Dies wird als „Startwert“ des Zufallszahlengenerators bezeichnet . Auf diese Weise können Sie dieselbe Folge von Zufallszahlen generieren, wenn Sie einen festen Startwert verwenden oder wenn Sie einen Systemparameter wie die Zeit verwenden. Dann können Sie jedes Mal mit einem anderen Startwert beginnen und unterschiedliche Zufallszahlenfolgen haben. Auf diese Weise können Sie überprüfen, ob das Ergebnis Ihrer stochastischen Simulation nicht durch eine gewisse Vorhersagbarkeit in der Zufallszahlenfolge beeinflusst wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.