Provided by: manpages-de-dev_0.10-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(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_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 weder ablaufinvariant noch sicher für  Threads,
       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.

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 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  3.32  des  Projekts
       Linux-man-pages. Eine Beschreibung des Projekts und Informationen,  wie
       Fehler     gemeldet     werden     können,     finden     sich    unter
       http://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>.

                                1. Oktober 2010                        RAND(3)