Zufallszahlen nicht zufällig
-
#include<iostream> #include<time.h> #include<stdio.h> #include<stdlib.h> #include<windows.h> int main() { using namespace std; int test; for (int i = 0; i < 1000; i++) { srand(time(NULL)); cout << rand() % 100 << endl; } cin>> test; }Also ich will einfach nur mehrere Zufallszahlen erzeugen. Das Problem dabei:
Die rand Funktion liefert, wenn ich sie mit der Systemzeit inizialisiere immer nur einen Wert innerhalb einer Sekunde. Ist ja auch logisch und ließe sich sicherlich irgendwie umgehen. Viel größer ist aber das Problem, dass meine Zufallszahlen allgemein nicht zufällig sind. Wenn ich das Programm mehrfach hintereinander startet, dann bekomem ich aber auch inkrementierent unzufällige Zahlen. Daher der Zufallswert steigt jede Sekunde um einen regelmäßigen Wert an, bis die 100 erreicht ist und fängt dann wieder bei 1 an. Wie bekomem ich denn jetzt echt Zufallszahlen. Bräuchte ich nur ab und an mal eine wäre diese unzufälligkeit ja eigentlioch egal.. Aber wenn ich in kurzem Zeitruam mehrere brauche, dann sind sie nichtmal mehr ansatzweise zufällig.Vielen Dank schonmal!
-
Wenn du eines der Probleme schon erkannt hast, wieso verschiebst du srand(time(NULL)) dann nicht nach außerhalb der Schleife?
Wenn du das Programm mehrmals pro Sekunde startest, kannst du statt time(0) auch was anderes benutzen, z.B. clock() (oder besser, aber plattformabhängig: rdtsc).Edit: clock() ist ja Unfug, weil immer 0 bei Programmstart. Falls du unter Windows arbeitest, geht stattdessen auch GetTickCount() oder QueryPerformanceCounter();
Edit2: guckst du auch hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html
-
-
Die header
<time.h>, <stdio.h>und<stdlib.h>sind C-Header, nutze stattdessen <ctime>, <cstdio> (wenn denn unbedingt nötig) und <cstdlib>.