Was ist der richtige Weg, um die Funktion rand () in C ++ zu verwenden?

7

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:

  1. Lassen Sie den Benutzer eine Nummer eingeben und setzen Sie diese als Seed (was einfach zu implementieren wäre, aber dies ist ein letzter Ausweg) ODER
  2. Irgendwie muss der Seed auf die Computeruhr oder eine andere sich ständig ändernde Zahl eingestellt sein.

Bin ich in meinem Kopf und sollte ich jetzt aufhören? Ist Option 2 schwierig zu implementieren? Irgendwelche anderen Ideen?

Vielen Dank im Voraus.

    
trikker 13.07.2009, 00:26
quelle

5 Antworten

27

Option 2 ist nicht schwierig, hier gehen Sie:

%Vor%

Sie müssen stdlib.h für srand() und time.h für time() einfügen.

    
John T 13.07.2009, 00:30
quelle
8

srand () sollte nur einmal verwendet werden:

%Vor%     
Martin York 13.07.2009 00:35
quelle
6

Es ist üblich, den Zufallsgenerator mit der aktuellen Zeit zu versehen. Probieren Sie:

srand (Zeit (NULL));

    
Roland Rabien 13.07.2009 00:31
quelle
4

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.

    
Michael Burr 13.07.2009 00:41
quelle
0

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.

    
Tim Jarvis 13.07.2009 00:49
quelle

Tags und Links