Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       rand, rand_r, srand - Pseudo-Zufallszahlengenerator

ÜBERSICHT

       #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():
           Seit Glibc 2.24:
               _POSIX_C_SOURCE >= 199506L
           Glibc 2.23 und älter
               _POSIX_C_SOURCE

BESCHREIBUNG

       Die  Funktion  rand()  gibt  eine  pseudo-zufällige  Ganzzahl  im  Bereich  0 bis RAND_MAX
       inklusive zurück (d.h. dem mathematischen Bereich [0, RAND_MAX]).

       Die  Funktion  srand()  setzt  ihr   Argument   als   Seed   (Zufallswert   zum   Erzeugen
       kryptografischer  Schlüssel) für eine neue Reihe von pseudo-zufälligen Ganzzahlen ein, die
       von rand() zurückgegeben 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 für rand() genommen.

       Die  Funktion rand() ist nicht ablaufinvariant, da sie versteckten Status benutzt, der bei
       jedem Aufruf geändert wird. Dies ist möglicherweise nur der Seed-Wert, der  beim  nächsten
       Aufruf  verwendet  werden  soll,  oder  etwas  komplizierteres.  Um  ein  reproduzierbares
       Verhalten für 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-zufällige Ganzzahl im Bereich [0, RAND_MAX] zurück.
       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 für die
       Ganzzahl aufgerufen wird, auf die seedp zeigt, und der Wert zwischen  den  Aufrufen  nicht
       verändert wurde, dann wird das Ergebnis die gleiche pseudo-zufällige 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ÜCKGABEWERT

       Die  Funktionen  rand()  und rand_r() geben einen Wert zwischen 0 und RAND_MAX (inklusive)
       zurück. Die Funktion srand() gibt keinen Wert zurück.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌──────────────────────────┬───────────────────────┬─────────┐
       │SchnittstelleAttributWert    │
       ├──────────────────────────┼───────────────────────┼─────────┤
       │rand(), rand_r(), srand() │ Multithread-Fähigkeit │ MT-Safe │
       └──────────────────────────┴───────────────────────┴─────────┘

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 zufällig wie höherwertige Bits sein. Bei älteren Implementierungen von rand() sind
       niederwertige  Bits jedoch viel weniger zufällig als höherwertige Bits. Benutzen Sie diese
       Funktion nicht in Anwendungen, die portierbar sein sollen, wenn  ein  hochwertiger  Zufall
       benötigt wird. (Benutzen Sie stattdessen random(3).)

BEISPIEL

       POSIX.1-2001  gibt das folgende Beispiel einer Implementierung von rand() und srand(), das
       vielleicht  nützlich  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 int seed) {
               next = seed;
           }

       Das  folgende  Programm  kann benutzt werden, um eine pseudo-zufällige Sequenz anzuzeigen,
       die durch rand()  erzeugt  wird,  wenn  eine  bestimmte  Seed  (Zufallswert  zum  Erzeugen
       kryptografischer Schlüssel) 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  Veröffentlichung  4.15  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net> und
       Chris Leick <c.leick@vollbio.de> 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>.

                                          13. Juli 2017                                   RAND(3)