Man page - rand(3)

Packages contains this manual

Available languages:

en fr pl ja ro de

Manual

rand

BEZEICHNUNG
BIBLIOTHEK
ÜBERSICHT
BESCHREIBUNG
RÜCKGABEWERT
ATTRIBUTE
VERSIONEN
STANDARDS
GESCHICHTE
BEISPIELE
SIEHE AUCH
ÜBERSETZUNG

BEZEICHNUNG

rand, rand_r, srand - Pseudo-Zufallszahlengenerator

BIBLIOTHEK

Standard-C-Bibliothek ( libc , -lc )

ÜBERSICHT

#include <stdlib.h>

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

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

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 zstartz 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 zstartz 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 zstartz 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.

Image grohtml-1228301-1.png

VERSIONEN

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).)

STANDARDS

rand ()

srand ()

C11, POSIX.1-2008.

rand_r ()

POSIX.1-2008.

GESCHICHTE

rand ()

srand ()

SVr4, 4.3BSD, C89, POSIX.1-2001.

rand_r ()

POSIX.1-2001. In POSIX.1-2008 als veraltet markiert.

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, "Usage: %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 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 .