Arcoth schrieb:
Nexus schrieb:
Wenn man die Zeit zum Seeden nimmt, würde ich aber eine Uhr mit höherer Auflösung nehmen.
Tut clock() es nicht?
Nein. Das gibt eventuell so etwas zurück wie die Zeit seit Programmstart. Was dann bei jedem Start zu einem Seed aus einem sehr kleinen Bereich führt.
Ein paar gute Quellen für Seeds und weitere Gedanken zum Thema:
-Einmal den Echtzufallsgenerator nach einem Seed befragen: Dies ist eine der besten Quellen. (Achtung: in gewissen Szenarien (z.B. kurz nach Systemstart) ist das eventuell auch nicht sehr zufällig).
-Wenn's nicht kryptografisch sicher sein braucht, dann kann (und sollte) man den normalen PRNG benutzen, den praktissch jedes OS zur Verfügung stellt.
-Wenn man keine Zufallszahlenquelle haben sollte: Die Uhrzeit zusammen mit der PID verhasht sollte einen halbwegs zufälligen Wert geben, wenn man das Programm nicht hundert tausende Male pro Sekunde startet. Der Fantasie sind hier kaum Grenzen gesetzt, z.B. kann man auch die Host-ID noch mit reinnehmen, wenn man auf einem Großrechner arbeitet.
-Wenn man schnell viele Prozesse startet (zehntausende!), die miteinander kommunizieren können, dann kann man auch einen davon seeden und dessen Zahlen als Seed an die anderen Prozesse schicken.
-Wenn man zehntausende Prozesse startet, dann sollte man auch da drauf achten, dass der Seed überhaupt genügend Entropie haben kann. Wenn man zehntausende 32-Bit Zahlen erzeugt, dann wird die Wahrscheinlichkeit, dass zwei davon gleich sind, schon recht groß (Geburtstagsparadoxon). Da sollte man schon mit 64 Bit recchnen.