Hallo, On Wednesday 13 October 2004 00:08, David Haller wrote:
Am Tue, 12 Oct 2004, Bernhard Walle schrieb:
* Ferdinand Ihringer
[2004-10-12 22:08]: Ich habe ein Problem mit Zufallszahlen bzw. ein Problem mit dem Ausgangswert für Pseudozufallszahlen mit srand(). Das Programm sollte plattformunabhängig sein und ich würde mich gerne auf die zum ANSI-Standard gehörenden Funktionen beschränken, aber für statistische Zwecke rufe ich es z.B. 10000 mal hintereinander auf. Als einzigen plattformunabhängigen Wert, der da in Frage kommt, kenne ich da time(0).
BTW: "eigentlich" sollte das wohl 'time(NULL)' sein.
Im Quelltext steht auch NULL statt 0 drin. Ich wollte hier nur nicht zu ausschweifend werden.
Die 10000 Programmaufrufe erstrecken sich aber nun leider über ein bisschen mehr als 60 Sekunden. Da hätte ich das Programm auch nur 60 mal aufrufen können.
PID auslesen (getpid() unter POSIX) geht auch nicht? Ansonsten kann man auch uninitialisierte Variablen vom Stack auslesen, geht natürlich aus jeder Plattform. ftime() wäre auch POSIX, aber eben nicht ANSI C.
Und vielleicht 'gettimeofday' oder statt 'time'. Das mit der PID ist sicherlich auch noch ne Idee.
Alles schön, aber alles 'nur' POSIX...
Evtl. koennte mann das Ergebnis auch noch durch einen Hash-Algorithmus schicken, z.B. MD5 oder SHA1 und dies dann wieder auf 'sizeof(unsigned int)' "kuerzen" (und zwar nicht mit nem einfachen 'mod').
Eine Frage aus reinem Interesse: Wie würde man das machen? Einfach von den 16-MD5 die sizeof(unsigned int) ersten Bytes nehmen? Ferdinand