Sönke Tesch: Zufallszahlen

Beitrag lesen

Nun meine Frage, wenn ich die Funktion mt_rand in mehreren verschiedenen
Funktionen verwende, an welchen Stellen muss ich dann die Funktion
mt_srand aufrufen?

Einmal pro Programm (in diesem Fall: Skript) reicht völlig aus. Erst bei Programmen, die über Stunden oder Tage laufen, lohnt sich die Überlegung eines Neustarts des Zufallsgenerators per seed.

Zufallsgeneratoren erzeugen von keine tatsächlich zufälligen Zahlen, sondern lediglich berechnete Zahlenreihen, die möglichst viele Eigenschaften von echten zufälligen Zahlenreihen besitzen.

Diese berechneten Zahlenreihen beginnen also zwangsläufig an einem bestimmten Startwert, dem ebenso zwangsläufig vorhersehbare Zahlen folgen. Damit nun nicht jedesmal die gleiche Zahlenreihe erscheint, wird ein solcher Zufallsgenerator mit einem halbwegs zufälligen Startwert initiiert. Dazu dient die "seed"-Funktion. Die "rand"-Funktion liefert darauf basierend die entsprechende Zahlenreihe.

Zu häufiger Einsatz von seed kann übrigens das Ergebnis eher verschlechtern (zumindest theoretisch), je nachdem, woher man den Startwert bekommt.
Die Zeit beispielsweise kann als einzelner Punkt zwar durchaus recht zufällig sein, benutzt man aber mehrere Zeitpunkte, läuft man schon Gefahr, eine Regelmäßigkeit zu bekommen - schlicht und ergreifend dadurch, daß ein Programm von seed A bis zu seed B immer die exakt gleiche Zeitdauer benötigt.

Diese Überlegung ist aber wie gesagt nur rein theoretisch und für die Praxis sicher in den allermeisten Fällen unbedeutend.

Gruß,
  soenk.e