Ich mache eine Buchübung, die besagt, dass ich ein Programm schreiben soll, das Pseudozahlen erzeugt. Ich fing einfach mit an.
%Vor%Ich bemerkte, dass jedes Mal, wenn das Programm ausgeführt wurde, die gleiche "zufällige" Ausgabe vorhanden war. Also habe ich nach Zufallszahlengeneratoren gesucht und beschlossen, das Seeding zu versuchen, indem ich das zuerst in randint () einfüge.
%Vor%Das hat immer wieder die gleiche Zahl erzeugt (ich fühle mich jetzt dumm, sie zu implementieren).
Also dachte ich, ich wäre schlau und setze den Samen so um.
%Vor%Das hat im Prinzip genauso funktioniert wie das Programm, hat aber eine andere Menge von Zahlen ausgegeben (was sinnvoll ist, da die erste Zahl von rand () immer 41 ist.)
Das Einzige, was ich mir vorstellen könnte, um das zufälliger zu machen, ist:
Bin ich in meinem Kopf und sollte ich jetzt aufhören? Ist Option 2 schwierig zu implementieren? Irgendwelche anderen Ideen?
Vielen Dank im Voraus.
Es ist üblich, den Zufallsgenerator mit der aktuellen Zeit zu versehen. Probieren Sie:
srand (Zeit (NULL));
Das Problem ist, dass, wenn Sie den Generator nicht säen, er sich mit 0
(so als ob srand(0)
aufgerufen würde) säen würde. PRNGs sind so angelegt, dass sie die gleiche Sequenz erzeugen, wenn sie gleich gesetzt werden (aufgrund der Tatsache, dass PNRGs nicht wirklich zufällig sind, sie sind deterministische Algorithmen und vielleicht ein bisschen, weil es sehr nützlich für das Testen ist).
Wenn Sie versuchen, mit einer Zufallszahl zu beginnen, verwenden Sie
%Vor%Sie machen gerade:
%Vor%Als FigBug erwähnt , nutzte die Zeit, um den Generator zu säen wird häufig verwendet.
Ich denke, dass der Sinn dieser Artikel darin besteht, den Algorithmus zu implementieren, der in rand () ist, und nicht, wie man ihn effektiv einsetzt.
Das Erzeugen von (Pseudo-) Zufallszahlen ist nicht trivial und es lohnt sich, verschiedene Techniken zu ihrer Erzeugung zu untersuchen. Ich denke nicht, dass einfach Rand (), was die Autoren im Sinn hatten.Tags und Links c++