RAND(3)

BEZEICHNUNG
rand, srand - Zufallszahlengenerator

ÜEBERSICHT
#include <stdlib.h>

int rand(void);

void srand(unsigned int seed);

BESCHREIBUNG
Die Funktion rand() liefert eine Pseudozufalls-Ganzzahl (integer) zwischem 0 und RAND_MAX.

Die Funktion srand() setzt ihr Argument als Ursprung für eine neue Reihe von Pseudozufalls-Ganzzahlen ein, welche von rand() geliefert werden. Diese Sequenzen sind durch Aufruf von srand() mit dem selben Ursprungswert wiederholbar.

Wenn kein Ursprungswert angegeben wird, wird 1 als Ursprungswert für rand() angenommen.

RÜCKGABEWERT
Die Funktion rand() liefert einen Wert zwischen 0 und RAND_MAX. Die Funktion srand() liefert keinen Wert zurück.

ANMERKUNGEN
Die Versionen von rand() und srand() in der Linux C-Bibliothek benutzen den selben Zufallszahlengenerator wie random() und srandom(), d.h. niederwerte Bits sind genauso zufällig wie höherwertige Bits. Bei älteren Implementationen von rand() sind niederwerte Bits jedoch viel weniger zufällig als höherwertige Bits.

In Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1990 (1st ed, p. 207)), finden sich die folgenden Kommentare:
    "Wenn Sie Zufalls-Ganzzahlen zwischen 1 und 10 erzeugen möchten, sollten Sie dies immer wie folgt tun:

        j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

    und niemals auf folgene oder ähnliche Weise:

        j=1+((int) (1000000.0*rand()) % 10);

    (wodurch niederwerte Bits benutzt würden)."

Zufallszahlenerzeugung ist ein kompliziertes Thema. Das Buch Numerical Recipes in C (siehe oben) liefert eine exzellente Diskussion über praktische Zufallszahlenerzeugung in Kapitel 7 (Zufallszahlen).

Für eine mehr theoretische Diskussion, die auch viele praktische Aspekte behandelt, sehen Sie bitte Kapitel 3 (Zufallszahlen) in Donald E. Knuths The Art of Computer Programming, volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981.

KONFORM ZU
SVID 3, BSD 4.3, ISO 9899

SIEHE AUCH
random(3), srandom(3), initstate(3), setstate(3).