V
curry-king schrieb:
Naja, überall und jeder ist ein bisschen übertrieben, aber du könntest deinen Wert
"noch zufälliger" mit
#include <sys/types.h>
#include <unistd.h>
.
.
srand(time(NULL)+getpid());
.
.
machen.
naja. das war wohl gerade unfug.
problem an der sache sind doch die wenigen seeds. selbst völlig ohne ahnung um die uhrzeit sinds nur 2^32 strück. macht er damit zum beispiel "zufällige" passwörter, kanns nur 2^32 stück geben. selsbt wenn er passwörter würfelt, die 20 zeichen lang sind und sonderzeichen und ziffern drin haben.
sagen wir mal realisterscher, man braucht nur 1000000 seeds zu bedenken. und getpid() liegt auch unter 1000000. effekt beim addieren: 2000000. also völlig egal.
warum haste nicht wenigstens srand(time(0))+1000000*getpid() genommen?
man wird auch das problem mit der vorhersagbaren uhrzeit los, wenn man einfach nen seed auf die platte legt und bei programmstart liest und bei programmende schreibt. der muss halt einmal gut gemacht werden.
oder wie wärs mit der mac-adresse und rdtsc als zufallsquelle mit mehr digits? oder man nimme den prime twin generator und speichert das ganze feld.
aber erstmal sollte man sich klar machen, warum einem rand() nicht genügt. und zwar das problem genau beschreiben, nicht "ich hab das gefühl, es könnte besser gehen".
meist reicht schon srand(time(0));rand(); als initialisierung völlig us. weil kein mensch das prog mehr als einmal pro sekunde startet und weil damit der effekt der sekundlich um 1 erhöhten ersten ziehung weg ist.