Namespaces
Variants

rand

From cppreference.net
Definiert in Header <stdlib.h>
int rand ( ) ;

Gibt einen pseudo-zufälligen Ganzzahlwert zwischen 0 und RAND_MAX ( 0 und RAND_MAX inklusive) zurück.

srand() initialisiert den Pseudozufallszahlengenerator, der von rand() verwendet wird. Wenn rand() vor einem Aufruf von srand() verwendet wird, verhält sich rand() so, als wäre er mit srand ( 1 ) initialisiert worden. Jedes Mal, wenn rand() mit srand() initialisiert wird, muss es die gleiche Wertefolge erzeugen.

rand() ist nicht garantiert threadsicher.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

Pseudo-zufälliger Ganzzahlwert zwischen 0 und RAND_MAX , inklusive.

Hinweise

Es gibt keine Garantien bezüglich der Qualität der erzeugten Zufallssequenz. In der Vergangenheit hatten einige Implementierungen von rand() ernsthafte Mängel in Bezug auf Zufälligkeit, Verteilung und Periode der erzeugten Sequenz (in einem bekannten Beispiel wechselte das niederwertigste Bit einfach zwischen 1 und 0 bei aufeinanderfolgenden Aufrufen). rand() wird für ernsthafte Zufallszahlenanforderungen, wie in der Kryptographie, nicht empfohlen.

POSIX erfordert, dass die Periode des von rand verwendeten Pseudozufallszahlengenerators mindestens 2 32
beträgt.

POSIX bot eine threadsichere Version von rand namens rand_r an, die zugunsten der drand48 -Funktionsfamilie veraltet ist.

Beispiel

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
    srand(time(NULL)); // aktuelle Zeit als Seed für Zufallsgenerator verwenden
    int random_variable = rand();
    printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable);
    // 6-seitigen Würfel 20 Mal werfen
    for (int n=0; n != 20; ++n) {
        int x = 7;
        while(x > 6) 
            x = 1 + rand()/((RAND_MAX + 1u)/6); // Hinweis: 1+rand()%6 ist verzerrt
        printf("%d ",  x); 
    }
}

Mögliche Ausgabe:

Random value on [0,2147483647]: 448749574
3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.22.2.1 Die rand-Funktion (S. 252)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.22.2.1 Die rand-Funktion (S: 346)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.20.2.1 Die rand-Funktion (S. 312)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.10.2.1 Die rand-Funktion

Siehe auch

initialisiert den Pseudozufallszahlengenerator
(Funktion)
maximaler möglicher Wert, generiert durch rand ( )
(Makrokonstante)