Problem mit Zufallszahlen
-
Hallo,
Ich habe ein Problem mit Zufallszahlen:
zu Beginn des Programms wird der Zufallsgenerator initialisiert:srand((unsigned) time(NULL));Desweiteren habe ich eine Funktion intRand
int intRand(int min, int max) { if(min > max) return intRand(max, min); return min + (rand() % (max + 1)); }Nur wenn ihc dann die Funktion aufrufe, liefert sie immer dieselbe "Zufalls-"Folge zurück...
Woran kann das liegen?Danke schonmal
-
Ich habe die Funktion mal Interessehalber nachgebaut da sie mir "grundsätzlich" i.O. erschien und ich habe auch tatsächlich unterschiedliche Werte als Ergebnis bei min 5 und max 10 erhalten. Welche Werte hast Du denn probiert? und was ist dabei herausgekommen?
-
Das Problem ist, dass bei allen min- und max werten stets die gleichen zufallszahlen kommen (halt im entsprechenden Gebiet)...
Kann es daran liegen, dass ich das Programm im Debug-Modus von VC++ erstelle?~Birne
-
Hi!
Willst du etwa Zufallszahlen in einem bestimmten Bereich erzeugen, oder was hast du vor?
-
genau...
-
Birne94 schrieb:
Nur wenn ihc dann die Funktion aufrufe, liefert sie immer dieselbe "Zufalls-"Folge zurück...
Woran kann das liegen?Daran dass du doch nicht srand() aufrufst, oder dass du rand() aus einem anderen Thread aufrufst (jeder Thread hat seinen eigenen seed).
Davon abgesenen müsste es wohl eher
min + (rand() % (max - min + 1))heissen.
-
Empfehlt doch bei diesen zufälligen Fragen immer:
-
hi,
ist nicht seit dem technical report 1 von c++ eine sehr vielfältige Möglichkeit dazugekommen Zufallszahlen zu erzeugen?
//Mit #include <random> using namespace tr1;Davon würdest du dann wohl die "linear_congruential"-Engine brauchen, oder?
genaueres gibt es dazu hier:
http://codeguru.earthweb.com/cpp/cpp/cpp_mfc/stl/article.php/c15319/Gruß eXitus
-
Marc++us schrieb:
Empfehlt doch bei diesen zufälligen Fragen immer:
http://magazin.c-plusplus.net/artikel/Zuf�lle gibt`sFragezeichenAusrufezeichen - Funktionen rund um rand%2C Random und den ZufallNicht jeder, der ein/zwei Zeilen Code sucht möchte immer gleich einen ganzen Artikel lesen.
Birne94 schrieb:
genau...
Wozu das ganze rekursiv?

Guck mal:
int irand( int von, int bis ) { double r = bis - von + 1; return von + (int)(r * rand()/(RAND_MAX+1.0)); } int main() { int i; srand((unsigned) time(NULL)); for ( i=0; i<20; i++ ) printf("%4d", irand(-30,+30)); return 0; }Gruß,
r.
-
wo ist dort etwas rekursiv?
Die Funktion "vertauscht" nur die Parameter, wenn der 1. größer als der 2. ist