Zufall
-
Hi,
Wieso wird für Zufallsberechnungen in C die UNIX-Timestamp zur Berechnung hergenommen. Wieso kann man nicht folgendes machen:
Da Variablen unitialisiert sowieso irgendeinen zuälligen Wert haben, könnte man doch einfach eine Variable definieren und dessen zufälligen Wert dann zur Initialisierung des Zufallsgenerators hernehmen.Kann mich da mal jemand aufklären?
-
Der Zufallsgenerator basiert auf statischen Variablen - und die werden bei Programmstart mit einem festen Wert (wenn nichts anderes angegeben ist: 0) initialisiert.
Außerdem ist der Wert einer nicht-initialisierten Variablen nicht "zufällig", sondern nur "unbestimmt" (und gerade in Debug-Umgebung werden die gerne mit definierten Dummy-Werten gefüllt).PS: Niemand zwingt dich dazu, den Zufallsgenerator mit der aktuellen Uhrzeit zu initialisieren.
-
Antwort von Radio Eriwan: Im Prinzip ja, aber ...
Die Initialisierung einer deklarierten Variablen ohne Anfangszuweisung kann sehr wohl - nämlich auf Null - erfolgen. Es gibt da compilerabhängig nur Unterschiede zwischen globalen und lokalen Variablen. Nimm etwas wirklich zufälliges wie die Systemzeit, wofür es Funktionen gibt. Welche mögen dir andere nennen.
edit: CStoll - sind wir uns einig!
-
Auch in nicht-Debug-Umgebungen sind uninitialisierte Variablenwerte nicht wirklich zufällig. Normalerweise wird aller Speicher zum Programmstart genullt. Wenn man dann müllige Werte in Variablen erhält, dann sind das meistens Artefakte vom Startup-Code oder von sonstigen Funktionen die irgendwann gelaufen sind. Schönes Beispiel in dem Thread hier:
http://www.c-plusplus.net/forum/p2130443#2130443Wenn an der Stelle nicht zufällig selber gerade etwas Umgebungsabhängiges stand (z.B. eben die Uhrzeit, PID, o. Ä.), dann ist der Wert deterministisch.