Provided by: manpages-de-dev_4.13-4_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).)

BEISPIELE

       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 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 (int 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  5.10  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>, Chris Leick
       <c.leick@vollbio.de> und Mario Blättermann <mario.blaettermann@gmail.com> 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 die
       Mailingliste der Übersetzer.

                                                1. November 2020                                         RAND(3)