rand mit seed gibt nicht zufällig zurück, wenn die Funktion geloopt wurde

7

Ich schrieb diesen C-Code unten, wenn ich loop, gibt es eine Zufallszahl zurück. Wie kann ich die 5 verschiedenen Zufallswerte erreichen, wenn myrand () ausgeführt wird?

%Vor%     
xambo 29.11.2011, 16:41
quelle

5 Antworten

21

Das Seeding des Generators sollte einmal durchgeführt werden (für jede Sequenz von Zufallszahlen, die Sie natürlich erzeugen wollen!):

%Vor%     
AraK 29.11.2011, 16:43
quelle
5

Verschieben Sie den srand() -Aufruf in main() vor der Schleife.

Mit anderen Worten, rufen Sie srand() einmal auf und rufen Sie dann rand() wiederholt auf, ohne weitere Aufrufe von srand() :

%Vor%     
NPE 29.11.2011 16:43
quelle
1

Versuchen Sie Folgendes:

%Vor%

Meine "Vermutung" ist, dass 10 gleiche Werte gedruckt werden:)

    
pmg 29.11.2011 16:48
quelle
0

Der Punkt von seed () besteht darin, die Folge von Zufallszahlen mit einem bekannten Wert zu beginnen Sie erhalten dann immer die gleiche Zahlenfolge mit demselben Keim.

Das ist der Grund, warum Sie seed () haben, es erlaubt Ihnen, die gleiche Sequenz zum Testen zu erzeugen, oder Sie erhalten eine zufällige Saat (normalerweise die Zeit), die Sie jedes Mal eine andere Sequenz erhalten.

    
Martin Beckett 29.11.2011 16:45
quelle
-2

Wenn Sie bei jedem Aufruf von random() (für zusätzliche Zufälligkeit) neu formatieren möchten, können Sie dies folgendermaßen tun:

%Vor%
  • time() wird einmal pro Sekunde aktualisiert, unterscheidet sich jedoch jedes Mal, wenn Sie Ihr Programm ausführen
  • clock() wird sehr viel häufiger aktualisiert, startet aber bei jedem Programmstart
  • mit 0
  • random() stellt sicher, dass Sie (in der Regel) nicht zweimal hintereinander denselben Wert verwenden, wenn Ihre Schleife schneller als die Granularität von clock() ist.

Natürlich könntest du mehr tun, wenn du wirklich, wirklich, Zufälligkeit willst - aber das ist ein Anfang.

    
nobar 27.02.2014 16:14
quelle

Tags und Links