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!


  • Mod

    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#2130443

    Wenn an der Stelle nicht zufällig selber gerade etwas Umgebungsabhängiges stand (z.B. eben die Uhrzeit, PID, o. Ä.), dann ist der Wert deterministisch.


Log in to reply