RANDOM(3)

BEZEICHNUNG
random, srandom, initstate, setstate - Zufallszahlengenerator.

ÜBERSICHT
#include <stdlib.h>

long int random(void);
void srandom(unsigned int seed);
char *initstate(unsigned int seed, char *state, int n);
char *setstate(char *state);

BESCHREIBUNG
Die random()-Funktion benutzt einen Zufallsgenerator mit nicht-linearem additiven Feedback mit einer vorgegebenen Tabellengröße von 31 long integers um aufeinanderfolgende Pseudozufallszahlen im Rahmen von 0 bis RAND_MAX zurückzugeben. Die Periode dieses Zufallszahlengenerators ist sehr groß, ungefähr 16*((2**31)-1).

Die Funktion srandom() setzt ihr Argument als Ursprung für eine neue Folge von Pseudozufalls-Ganzzahlen, welche von random() geliefert werden. Diese Folgen sind wiederholbar durch Aufruf von srandom() mit dem gleichen Ursprungswert. Wenn keine Ursprungswert angegeben wird random() automatisch mit dem Ursprungswert 1 gestartet.

Die Funktion initstate() erlaubt es, ein Zustandsfeld state für den Gebrauch durch random() zu initialisieren. Die Größe n des Zustandsfeldes wird von initstate() benutzt, um zu entscheiden wie differenziert es ein Zufallszahlengenerator benutzen soll — je größer das Zustandsfeld, desto besser die Zufallszahlen seed ist der Ursprungswert für die Initialisierung, welcher den Startpunkt für den Zufallszahlenfolge angibt und sicherstellt zum erneuten Starten am gleichen Punkt.

Die Funktion setstate() ändert das Zustandsfeld, welches von der Funktion random() benutzt wird. Das Zustandsfeld state wird zum Erzeugen der Zufallszahlen benutzt bis zum nächsten Aufruf von initstate() oder setstate(). state muß zuerst initialisiert werden durch Benutzen von initstate().

RÜCKGABEWERT
Die Funktion random() liefert einen Wert zwischen 0 und RAND_MAX. Die Funktion srandom() liefert keinen Wert zurück. Die Funktionen initstate() und setstate() liefert einen Zeiger auf das vorherige Zustandsfeld.

FEHLER

EINVAL
    Ein Zustandsfeld von weniger als 8 Byte wurde an initstate() übergeben.

BEMERKUNGEN
Aktuelle "optimale" Werte für die Größe n des Zustandsfeldes sind 8, 32, 64, 128 und 256 Byte; andere Werte werden abgerundet auf den nächsten bekannten Wert. Verwendung von weniger als 8 Byte erzeugt einen Fehler.

KONFORM ZU
BSD 4.3

SIEHE AUCH
rand(3), srand(3).