Provided by: manpages-de-dev_0.10-1_all bug

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)