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, size_t n);
char *setstate(char *state);

Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

random(), srandom(), initstate(), setstate():
    _XOPEN_SOURCE >= 500
        || /* Glibc seit 2.19: */ _DEFAULT_SOURCE
        || /* Glibc-Versionen <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

BESCHREIBUNG
Die Funktion random() benutzt einen Zufallsgenerator mit nichtlineareradditiver Rückkopplung (Feedback) mit einer vorgegebenen Tabellengröße von 31 »long integers«, um aufeinander folgende Pseudozufallszahlen im Bereich 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 zur Initialisierung (als »Saat«) für eine neue Folge von pseudozufälligen Integers, welche von random() geliefert werden. Diese Folgen sind wiederholbar durch Aufruf von srandom() mit der gleichen Saat. Falls keine Saat angegeben wird, wird random() automatisch mit dem Wert 1 gestartet.

The initstate() function allows a state array state to be initialized for use by random(). The size of the state array n is used by initstate() to decide how sophisticated a random number generator it should use—the larger the state array, the better the random numbers will be. Current "optimal" values for the size of the state array n are 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to the nearest known amount. Using less than 8 bytes results in an error. seed is the seed for the initialization, which specifies a starting point for the random number sequence, and provides for restarting at the same point.

Die Funktion setstate() ändert das Zustandsfeld, welches von der Funktion random() benutzt wird. Das Zustandsfeld state wird bis zum nächsten Aufruf von initstate() oder setstate() zum Erzeugen der Zufallszahlen benutzt . state muss dafür initialisiert worden sein: durch den Aufruf von initstate() oder setstate().

RÜCKGABEWERT
Die Funktion random() liefert einen Wert zwischen 0 und RAND_MAX zurück. Die Funktion srandom() liefert keinen Wert zurück. Die Funktion initstate() gibt einen Zeiger auf das vorige Zustandsfeld zurück. Bei einem Fehler wird errno entsprechend gesetzt. Bei Erfolg gibt initstate() einen Zeiger auf das vorige Zustandsfeld zurück. Bei einem Fehler wird NULL zurückgegeben und errno entsprechend gesetzt.

FEHLER

EINVAL
    Das an setstate() übergebene state-Argument war NULL.

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

ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert
random(), srandom(), initstate(), setstate() | Multithread-Fähigkeit | MT-Safe

KONFORM ZU
POSIX.1-2001, POSIX.1-2008, 4.3BSD.

ANMERKUNGEN
The random() function should not be used in multithreaded programs where reproducible behavior is required. Use random_r(3) for that purpose.

Die Erzeugung von Zufallszahlen ist eine schwierige Aufgabe. 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, 2007, 3rd ed.) enthält in Kapitel 7 (Random Numbers) eine ausgezeichnete Diskussion der Probleme bei der praktischen Erzeugung von Zufallszahlen.

Eine eher theoretische Diskussion, die auch viele praktische Probleme aufgreift, finden Sie in Kapitel 3 (Random Numbers) in Donald E. Knuths The Art of Computer Programming, Volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981.

FEHLER
Laut POSIX sollte initstate() im Fehlerfall NULL zurückliefern. In der Glibc-Implementierung wird (wie spezifiziert) errno im Fehlerfall gesetzt, aber die Funktion liefert nicht NULL zurück.

SIEHE AUCH
getrandom(2), drand48(3), rand(3), random_r(3), srand(3)

KOLOPHON
This page is part of release 4.11 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Dr. Tobias Quathamer <toddy@debian.org> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.