Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

       rand, rand_r, srand - Pseudo-Zufallszahlengenerator

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <stdlib.h>

       int rand(void);
       void srand(unsigned int seed);

       [[veraltet]] int rand_r(unsigned int *seedp);

   Mit Glibc erforderliche Feature-Test-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 Zufallsstartwert wiederholbar.

       Wenn  kein  Zufallsstartwert  angegeben  wird, wird automatisch 1 als Zufallsstartwert 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 Zufallsstartwert, 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 │
       └───────────────────────────────────────────────────────┴───────────────────────┴─────────┘

STANDARDS

       Die  Funktionen  rand()  und srand() richten sich nach SVr4, 4.3BSD, 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  ein bestimmter Zufallsstartwert (Zufallswert zum
       Erzeugen kryptografischer Schlüssel) vorgegeben wird. Wenn  der  Zufallsstartwert  als  -1
       angegeben wird, verwendet das Programm einen zufälligen Zufallsstartwert.

           #include <stdio.h>
           #include <stdlib.h>

           int
           main(int argc, char *argv[])
           {
               int           r;
               unsigned int  seed, nloops;

               if (argc != 3) {
                   fprintf(stderr, "Aufruf: %s <seed> <nloops>\n", argv[0]);
                   exit(EXIT_FAILURE);
               }

               seed = atoi(argv[1]);
               nloops = atoi(argv[2]);

               if (seed == -1) {
                   seed = arc4random();
                   printf("seed: %u\n", seed);
               }

               srand(seed);
               for (unsigned int j = 0; j < nloops; j++) {
                   r =  rand();
                   printf("%d\n", r);
               }

               exit(EXIT_SUCCESS);
           }

SIEHE AUCH

       drand48(3), random(3)

Ü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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-german@lists.debian.org⟩.