Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
rand, rand_r, srand - Pseudo-Zufallszahlengenerator
"UBERSICHT
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
rand_r(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
BESCHREIBUNG
Die Funktion rand() gibt eine pseudo-zufallige Ganzzahl im Bereich 0
bis RAND_MAX inklusive zuruck (d.h. dem mathematischen Bereich
[0, RAND_MAX]).
Die Funktion srand() setzt ihr Argument als Seed (Zufallswert zum
Erzeugen kryptografischer Schlussel) fur eine neue Reihe von
pseudo-zufalligen Ganzzahlen ein, die von rand() zuruckgegeben werden.
Diese Sequenzen sind durch Aufruf von srand() mit dem selben Seed-Wert
wiederholbar.
Wenn kein Seed angegeben wird, wird automatisch 1 als Seed-Wert fur
rand() genommen.
Die Funktion rand() ist weder ablaufinvariant noch sicher fur Threads,
da sie versteckten Status benutzt, der bei jedem Aufruf geandert wird.
Dies ist moglicherweise nur der Seed-Wert, der beim nachsten Aufruf
verwendet werden soll, oder etwas komplizierteres. Um ein
reproduzierbares Verhalten fur eine Anwendung mit Threads zu erhalten,
muss dieser Status explizit gesetzt werden; dies kann mit der
ablaufinvarianten Funktion rand_r() erledigt werden.
Wie rand() gibt rand_r() eine pseudo-zufallige Ganzzahl im Bereich
[0, RAND_MAX] zuruck. Das Argument seedp ist ein Zeiger auf einen
unsigned int, der benutzt wird, um den Status zwischen Aufrufen zu
speichern. Falls rand_r() mit dem gleichen Anfangswert fur die Ganzzahl
aufgerufen wird, auf die seedp zeigt, und der Wert zwischen den
Aufrufen nicht verandert wurde, dann wird das Ergebnis die gleiche
pseudo-zufallige Sequenz sein.
Der Wert, auf den das Argument seedp von rand_r() zeigt, stellt nur
einen kleinen Anteil des Status bereit, daher wird diese Funktion nur
ein schwacher Pseudo-Zufallsgenerator sein. Probieren Sie stattdessen
drand48_r(3).
R"UCKGABEWERT
Die Funktionen rand() und rand_r() geben einen Wert zwischen 0 und
RAND_MAX (inklusive) zuruck. Die Funktion srand() gibt keinen Wert
zuruck.
KONFORM ZU
Die Funktionen rand() und srand() richten sich nach SVr4, 4.3BSD, C89,
C99 und POSIX.1-2001. Die Funktion rand_r() richtet sich nach
POSIX.1-2001. POSIX.1-2008 kennzeichnet rand_r() als veraltet.
ANMERKUNGEN
Die Versionen von rand() und srand() in der Linux C-Bibliothek benutzen
den selben Zufallszahlengenerator wie random(3) und srandom(3), daher
sollten niederwertige Bits genauso zufallig wie hoherwertige Bits sein.
Bei alteren Implementierungen von rand() sind niederwertige Bits jedoch
viel weniger zufallig als hoherwertige Bits. Benutzen Sie diese
Funktion nicht in Anwendungen, die portierbar sein sollen, wenn ein
hochwertiger Zufall benotigt wird. (Benutzen Sie stattdessen
random(3).)
BEISPIEL
POSIX.1-2001 gibt das folgende Beispiel einer Implementierung von
rand() und srand(), das vielleicht nutzlich ist, wenn es darum geht,
die gleiche Abfolge auf zwei unterschiedlichen Rechnern zu erhalten.
static unsigned long next = 1;
/* es wird angenommen, dass RAND_MAX 32767 ist */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
Das folgende Programm kann benutzt werden, um eine pseudo-zufallige
Sequenz anzuzeigen, die durch rand() erzeugt wird, wenn eine bestimmte
Seed (Zufallswert zum Erzeugen kryptografischer Schlussel) vorgegeben
wird.
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
int j, r, nloops;
unsigned int seed;
if (argc != 3) {
fprintf(stderr, "Aufruf: %s <seed> <nloops>\n", argv[0]);
exit(EXIT_FAILURE);
}
seed = atoi(argv[1]);
nloops = atoi(argv[2]);
srand(seed);
for (j = 0; j < nloops; j++) {
r = rand();
printf("%d\n", r);
}
exit(EXIT_SUCCESS);
}
SIEHE AUCH
drand48(3), random(3)
KOLOPHON
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net> und Chris Leick <c.leick@vollbio.de> 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 <debian-l10n-
german@lists.debian.org>.
1. Oktober 2010 RAND(3)