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)