Re: rand() nicht zufällig?!

From: Christian Lackas <c.lackas(at)kfa-juelich.de>
Date: Sat, 24 May 2003 00:26:21 +0200

* Robert Lillack <rob(at)lillack.de> [030523 23:55]:

Hallo Robert,

> hat jemand eine Ahnung, warum mir
> srand(666);
> while(1) {
> printf("%i\n", rand()%2);
> }
> unter NetBSD 1.6.1 (gcc 2.95.3) immer abwechselnd Nullen
> und Einsen liefert, was irgendwie nicht nach Zufall
> aussieht. Muss ich "den Zufall" erst irgendwie aktivieren?!

rand(3) ist eher ungeeignet zur Erzeugung von Zufallszahlen. Schau dir
lieber mal random(3) an.
Ein Nachteil von rand(3) ist z.B. das von die beobachtete Verhalten,
dass nicht alle Bits gleich zufällig sind. Insbesondere sind die unteren
Bits von geringerer Qualität (das liegt an der linearen Kongruenz).

Wenn es unbedingt rand(3) sein muss, dann nimm sowas:

    (rand()>>30)%2 // log(MAX_RAND)/log(2)-1 shiften für höchstes Bit

Zum Beispiel in den Numerical Recipes[1] findest du weitere Details (und
bessere Pseudo-Zufallsgeneratoren).

    [1] http://www.library.cornell.edu/nr/

Gruss
 Christian

-- 
Für das große Chaos haben wir Computer.
Die übrigen Fehler machen wir von Hand.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sat 24 May 2003 - 00:26:37 CEST

search this site