random(3) Library Functions Manual random(3) BEZEICHNUNG random, srandom, initstate, setstate - Zufallszahlengenerator BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include long random(void); void srandom(unsigned int seed); char *initstate(unsigned int seed, char state[.n], size_t n); char *setstate(char *state); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): random(), srandom(), initstate(), setstate(): _XOPEN_SOURCE >= 500 || /* Glibc >= 2.19: */ _DEFAULT_SOURCE || /* Glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE BESCHREIBUNG Die Funktion random() benutzt einen Zufallsgenerator mit nichtlineareradditiver Ruckkopplung (Feedback) mit einer vorgegebenen Tabellengrosse von 31 >>long integers<<, um aufeinander folgende Pseudozufallszahlen im Bereich von 0 bis 2^31 - 1 zuruckzugeben. Die Periode dieses Zufallszahlengenerators ist sehr gross, ungefahr 16 * ((2^31) - 1). Die Funktion srandom() setzt ihr Argument zur Initialisierung (als >>Saat<<) fur eine neue Folge von pseudozufalligen Ganzzahlen, 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. Die Funktion initstate() erlaubt es, ein Zustandsfeld state fur den Gebrauch durch random() zu initialisieren. Die Grosse n des Zustandsfeldes wird von initstate() benutzt, um zu entscheiden wie differenziert es einen Zufallszahlengenerator benutzen soll - je grosser das Zustandsfeld, desto besser die Zufallszahlen. Derzeit sind >>optimale<< Werte fur die Grosse des Zustandsfelds n 8, 32, 64, 128 und 256 Byte; andere Grossen werden zu dem nachsten bekannten Wert abgerundet. Die Verwendung von weniger als 8 Byte fuhrt zu einem Fehler. seed ist der Wert fur die Initialisierung, welcher den Startpunkt fur den Zufallszahlenfolge angibt und ermoglicht, am gleichen Punkt erneut zu starten. Die Funktion setstate() andert das Zustandsfeld, welches von der Funktion random() benutzt wird. Das Zustandsfeld state wird bis zum nachsten Aufruf von initstate() oder setstate() zum Erzeugen der Zufallszahlen benutzt . state muss dafur initialisiert worden sein: durch den Aufruf von initstate() oder setstate(). RUCKGABEWERT Die Funktion random() liefert einen Wert zwischen 0 und (2^31) - 1 zuruck. Die Funktion srandom() liefert keinen Wert zuruck. Die Funktion initstate() gibt einen Zeiger auf das vorige Zustandsfeld zuruck. Bei einem Fehlschlag liefert sie NULL zuruck und setzt errno, um den Fehler anzuzeigen. Bei Erfolg gibt initstate() einen Zeiger auf das vorige Zustandsfeld zuruck. Bei einem Fehlschlag liefert sie NULL zuruck und setzt errno, um den Fehler anzuzeigen. FEHLER EINVAL Das an setstate() ubergebene state-Argument war NULL. EINVAL Ein Zustandsfeld von weniger als 8 Byte wurde an initstate() ubergeben. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------------------------+-------------------------+-----------+ |Schnittstelle | Attribut | Wert | +--------------------------------+-------------------------+-----------+ |random(), srandom(), | Multithread-Fahigkeit | MT-Sicher | |initstate(), setstate() | | | +--------------------------------+-------------------------+-----------+ STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, 4.3BSD. ANMERKUNGEN 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.) enthalt 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. WARNUNGEN Die Funktion random() sollte nicht in Programmen mit mehreren Threads, bei denen reproduzierbares Verhalten benotigt wird, verwandt werden. Nutzen Sie fur diesen Anwendungsfall stattdessen random_r(3). FEHLER Laut POSIX sollte initstate() im Fehlerfall NULL zuruckliefern. In der Glibc-Implementierung wird (wie spezifiziert) errno im Fehlerfall gesetzt, aber die Funktion liefert nicht NULL zuruck. SIEHE AUCH getrandom(2), drand48(3), rand(3), random_r(3), srand(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother , Martin Eberhard Schauer , Mario Blattermann und Dr. Tobias Quathamer erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.8 2. Mai 2024 random(3)