Hallo,
On Fre, 22 Dez 2000, Eilert Brinkmann wrote:
Peter Blancke wrote:
srand((unsigned)time((time_t*)0));
[...]
Das Problem ist aber, dass sich die erzeugten Zufallszahlen nur im
Sekundentakt aendern. Ich habe es nicht geschafft, den Nanosekundenwert
aus time.h zu benutzen.
Du kannst natürlich auch von dem Zufallsgenerator im Linux-Kernel
Gebrauch machen und ein paar zufällige Bytes aus /dev/urandom
lesen. Die Werte dürften auch noch besser als die von rand()
sein. Eine noch bessere Qualität liefert /dev/random, allerdings kann
es da sehr leicht passieren, daß man warten muß. Mehr Infos zu diesen
Devices gibt's mit `man 4 random`.
Ack. Dazu gleich ein Codeschnipsel:
#include
#include /* fuer strerror() */
#include /* fuer errno */
int main() {
int i = 0;
unsigned long long l = 0; /* wir brauchen 40 bits... */
FILE* randdev;
if(( randdev = fopen("/dev/urandom", "r") ) == NULL) {
fprintf(stderr,"Can't open /dev/urandom: %s\n",strerror(errno));
return(errno);
}
for(i=0; i < 5; i++) { /* 5*8bit = 40bit <= 1.099.511.627.776 */
l = l | fgetc(randdev); /* neues byte dazu 'odern' ... */
l = l << 8; /* ... und das ganze um 8 bit nach links ... */
}
fclose(randdev);
/* ... und auf 10 Stellen 'gekuerzt' ausgeben */
printf ("%0.10lu\n",(l % 10000000000));
return 0;
}
CU
David
--
Meine alte Provider email (dhaller@okay.net) wird demnaechst deaktiviert!
Bitte ggfs. auf 'david@dhaller.de' umstellen...
---------------------------------------------------------------------
To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com
For additional commands, e-mail: suse-linux-help@suse.com