immer gleiche Zufallszahl
-
Hi,
ich habe das Problem, dass ich in einer for-Schleife immer Zufallszahlen ausgeben will:random = (rand () % ((yyy + 1) - xxx)) + xxx;
Das Problem ist jedoch, dass immer die gleiche Zufallszahl ausgegeben wird. Wie ist es möglich unterschiedliche Zufallszahlen zu erhalten? Die Variablen belege ich vor dem Berechnen der Zufallszahl.
-
Hier ein Beispiel:
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/MfG f.-th.
-
Mach es am besten mit der "time()" Funktion.
-
Oder in der FAQ zu diesem Unterforum : http://www.c-plusplus.net/forum/viewtopic.php?t=39344
-
Oder wenn es für Windows sein soll:
#include <windows.h> srand (timeGetTime ());
-
danke für eure hilfe, aber so recht klappen will es nicht... ich habe es eingebunden in:
for(d = 0; d < 3; d++){ if((clock() - cstart) < 2 * CLOCKS_PER_SEC){ xxx = 0; yyy = 4-d; srand( (unsigned) time(NULL) ) ; random = (rand () % ((yyy + 1) - xxx)) + xxx; } } ...
dennoch gibt er mir stets die gleiche Zahl aus..
-
srand() legt den seed für rand und sollte daher nur einmal am Anfang des Programms aufgerufen werden.
-
also,
ich benutze bereits zuvor in der meinFunktion den Zufallsgenerator, dort klappt der wunderbar, nur beim 2.mal liefert er immer die gleiche Zahl. Wohin sollte dann das srand()? Auch vor der 1. Benutzung?
-
Ja. Ruhig gleich an den Anfang deines Programms.
-
Zufallist schrieb:
danke für eure hilfe, aber so recht klappen will es nicht... ich habe es eingebunden in:
for(d = 0; d < 3; d++){ if((clock() - cstart) < 2 * CLOCKS_PER_SEC){ xxx = 0; yyy = 4-d; srand( (unsigned) time(NULL) ) ; random = (rand () % ((yyy + 1) - xxx)) + xxx; } } ...
dennoch gibt er mir stets die gleiche Zahl aus..
Ohne mich jetzt genau belesen zu haben, aber bei Time(Null) legt er doch immer den Seed auf Basis NULL an. Immer der gleiche Seed => immer gleiche Zufallszahlen ..... Sinnvoller wäre doch in dem Falle Time(Now()) order irgendwas ....
P.S.: Falls ich gerade mist erzähle sorry .... war nur nen Blitzgedanke am morgen ....
-
nalamar schrieb:
Ohne mich jetzt genau belesen zu haben, aber bei Time(Null) legt er doch immer den Seed auf Basis NULL an. Immer der gleiche Seed => immer gleiche Zufallszahlen ..... Sinnvoller wäre doch in dem Falle Time(Now()) order irgendwas ....
P.S.: Falls ich gerade mist erzähle sorry .... war nur nen Blitzgedanke am morgen ....
Früüüh am Morgen
time (NULL) ...
Returns the number of seconds that have passed since midnight, 1st January 1970 GMT (or 7pm, 31st December 1969 EST). If the parameter is not NULL, the same value is stored in the location pointed to.
Auf Deutschessprach: Der Rückgabewert von time (NULL) sollte sich auf Deinem Rechner mindestens sekündlich ändern und ist damit ein ziemlich guter Seed für Zufallszahlen
Wie bereits drölffach beschrieben, sollte srand am besten eine der ersten Anweisungen im Programm sein und nicht häufiger oder seltener als 1 Mal aufgerufen werden.
-
@nalamar
Bei welcher Programmiersprache bist du denn gerade?
-
DirkB schrieb:
@nalamar
Bei welcher Programmiersprache bist du denn gerade?C-Plus-Minus oder etwas Ähnliches
-
-
ok danke, jetzt funktioniert es.
1 letzte frage, muss das auch bei Zufallszahlen zwischen 0 & 1 passieren?my_init_random(); testRandom = my_random_01();
-
Der "Zufallsgenerator" startet bei jedem Programmstart mit dem selben Wert.
Man kann diesen Startwert mit srand() setzen.
Damit man nun jedesmal einen anderen Startwert bekommt, initialisiert man den Zufallsgenerator mit der aktuellen Zeit (die ändert sich jede Sekunde).
Es wird auch nicht zufälliger, wenn man den Startwert öfter setzt.Demnach soltest du das auch bei binären Zufallszahlen machen.
Schau doch einfach mal eine Folge von Zahlen an, ob die zufällig genug ist.