Antworten und Tipps zur Frage
C++ : ich brauche eine möglichkeit, ganz schnell und mehrmals hintereinander 6 zufallszahlen zu generieren. srand(time(NULL)) aktualisiert sich nur 1x pro sek.
Frage von Sechem (18.03.2009 | 19:38)
Moment! Mit srand() initialisierst Du Deinen ZZGenerator (z.Bsp. beim Programmstart). Mit rand() kannst Du bel. viele Zufallszahlen erzeugen

Quelle:
- das weiß ich aus dem Stegreif
Antwort von HannesB (18.03.2009 | 20:35)
und Bestätigung von winni300 (18.03.2009 | 20:36)
Bewertung: positiv
Kommentar: Hab ich mich falsch ausgedrückt ;)
Ergänzungen
-
Sechem schrieb am (18.03.2009 | 20:42):
Trotzdem aktualisiert sich dieser Generator nur einmal in der Sekunde..!
Aber ich hab jetzt eine Methode: statt srand(time(NULL)) einfach srand(clock)) nehmen. Ansonsten ganz normal rand() benutzen.
So klappt es, aber ich verstehe nicht ganz warum. Weißt Du das?
Und muss ich eigentlich irgendwie time.h oder stdlib.h includen? hab nämlich nichts davon gemacht, aber die beiden Zufallsgeneratoren funktionieren trotzdem..
-
HannesB schrieb am (18.03.2009 | 20:43):
Also nochmals: srand() kannst Du irgendwann aufrufen (z.Bsp. beim Programmstart oder auch gar nicht). Wenn Du 6 Zufallszahlen benötigst, rufst Du einfach sechsmal rand() auf . Funktioniert das nicht?
-
HannesB schrieb am (18.03.2009 | 20:45):
Sicher, bitte sehr:
void srand ( unsigned int seed ); <cstdlib>
Initialize random number generator
The pseudo-random number generator is initialized using the argument passed as seed.
For every different seed value used in a call to srand, the pseudo-random number generator can be expected to generate a different succession of results in the subsequent calls to rand.
Two different initializations with the same seed, instructs the pseudo-random generator to generate the same succession of results for the subsequent calls to rand in both cases.
If seed is set to 1, the generator is reinitialized to its initial value and produces the same values as before any call to rand or srand.
In order to generate random-like numbers, srand is usually initialized to some distinctive value, like those related with the execution time. For example, the value returned by the function time (declared in header <ctime>) is different each second, which is distinctive enough for most randoming needs.
Parameters
seed
An integer value to be used as seed by the pseudo-random number generator algorithm.
Return Value
(none)
-
HannesB schrieb am (18.03.2009 | 20:47):
srand() und rand() sind in der stdlib.h deklariert. Wenn Du die nicht inkludierst, bekommst Du halt eine Compilerwarnung und die Funktionen werden als (int) angenommen.
-
Sechem schrieb am (18.03.2009 | 20:48):
Also das Prinzip und die Funktionsweise hab ich eig. schon verstanden!
Aber was ist denn der Unterschied zwischen time(NULL) und clock()?
Und zu dem Einbinden von z.B. time.h oder stdlib.h, kann es sein, dass man das in c++ gar nicht mehr machen muss? weil es ja auch so funktioniert!
-
Sechem schrieb am (18.03.2009 | 20:50):
Und ich kriege keine Kompilierwarnunf ;-)
-
HannesB schrieb am (18.03.2009 | 20:55):
time() zählt die Sekunden seit Beginn der C-Epoche, clock() die seit Start Deines Programms. Beide übrigens in time.h deklariert und auch hier gilt wieder: (int) wird angenommen, falls nicht inkludiert und trotzdem verwendet.
Na, schön für Dich. Dann haste die Warnung halt ausgeschaltet. Ist ja wie gesagt auch nur eine "Warnung".
-
Sechem schrieb am (18.03.2009 | 21:02):
Nö, habe gar keine Warnung ausgeschaltet^^
Aber wenn sich doch sowohl clock() als auch time() sozusagen nur sekündlich aktualisieren, warum klappt es dann mit clock(), nicht aber mit time()?
-
HannesB schrieb am (18.03.2009 | 21:20):
0:2 für Werder übrigens zur Halbzeit.
Mit so einer allgemeinen Aussage/Frage "Warum klappt es nicht?" ist leider wenig anzufangen. Welchen Algorithmus möchtest Du implementieren? Wie sieht Dein Sourcecode aus? Welche Ausgabe erwartest Du? Welche Ausgabe bekommst Du stattdessen? Welche Schritte hast Du bereits unternommen, um die Ursache der beobachteten Abweichung zu finden?
-
Sechem schrieb am (18.03.2009 | 21:25):
Ok, es klappt doch mit time() wenn man das nur genau ein mal initialisiert, hat sich also erledigt!
Nur das eine frage ich mich noch, nämlich warum es offenbar nicht notwendig ist, time.h zu includen. Ich bekomme keine Warnung, habe auch keine Warnung ausgeschaltet (jedenfalls nicht dass ich wüsste) und der Zufallsgenerator klappt trotzdem einwandfrei..
-
HannesB schrieb am (18.03.2009 | 21:34):
Wie gesagt: Beim Aufruf nicht deklarierter Funktionen werden diese zunächst (vom Compiler) als int XXX(...) angenommen. Du solltest Dir das aber besser gar nicht erst angewöhnen und alle Funktionen prinzipiell vorher deklarieren (bspw. durch Einbinden der Headerdatei mit der Deklaration).
-
Sechem schrieb am (18.03.2009 | 21:37):
Ok danke nochmal, dann binde ichs halt ein, schadet ja nix :)
Ergänzung schreiben:
Zugeordnetes Thema:
Programmierung,
C&,
Programmieren,
Zufall,
Computer,
Software,
Programmiersprache,
Technik,
Home Entertainment,
Allgemeinwissen,
Allgemeinbildung,
PCs