Namespaces
Variants

std:: rand

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

Gibt einen pseudo-zufälligen Ganzzahlwert aus dem Bereich [ 0 , RAND_MAX ] zurück.

std::srand() initialisiert den Pseudozufallszahlengenerator, der von rand() verwendet wird. Wenn rand() verwendet wird, bevor std::srand() aufgerufen wurde, verhält sich rand() so, als wäre es mit std:: srand ( 1 ) initialisiert worden.

Jedes Mal, wenn rand() mit std::srand() initialisiert wird, muss es dieselbe Sequenz von Werten bei aufeinanderfolgenden Aufrufen erzeugen.

Andere Funktionen in der Standardbibliothek können rand aufrufen. Es ist implementierungsdefiniert, welche Funktionen dies tun.

Es ist implementierungsdefiniert, ob rand() threadsicher ist.

Inhaltsverzeichnis

Rückgabewert

Pseudo-zufälliger Ganzzahlwert zwischen 0 und RAND_MAX .

Hinweise

Es gibt keine Garantien bezüglich der Qualität der erzeugten Zufallsfolge. In der Vergangenheit hatten einige Implementierungen von rand() ernsthafte Mängel in der Zufälligkeit, Verteilung und Periode der erzeugten Folge (in einem bekannten Beispiel wechselte das niederwertige Bit einfach zwischen 1 und 0 zwischen den Aufrufen).

rand() wird für ernsthafte Zufallszahlen-Generierungsanforderungen nicht empfohlen. Es wird empfohlen, die Zufallszahlen-Generierung von C++11 zu verwenden, um rand() zu ersetzen. (seit C++11)

Beispiel

Die Funktion bounded_rand() unten ist eine angepasste Version von Debiased Modulo (Once) .

#include <cstdlib>
#include <ctime>
#include <initializer_list>
#include <iostream>
unsigned bounded_rand(unsigned range)
{
    for (unsigned x, r;;)
        if (x = rand(), r = x % range, x - r <= -range)
            return r;
}
int main() 
{
    std::srand(std::time({})); // use current time as seed for random generator
    const int random_value = std::rand();
    std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << '\n';
    for (const unsigned sides : {2, 4, 6, 8})
    {
        std::cout << "Roll " << sides << "-sided die 8 times: ";
        for (int n = 8; n; --n)
            std::cout << 1 + bounded_rand(sides) << ' ';
        std::cout << '\n';
    }
}

Mögliche Ausgabe:

Random value on [0, 2147483647]: 948298199
Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 
Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 
Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 
Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2

Siehe auch

erzeugt gleichmäßig verteilte ganzzahlige Werte über einen Bereich
(Klassentemplate)
initialisiert den Pseudozufallszahlengenerator
(Funktion)
maximaler möglicher Wert, der von std::rand erzeugt werden kann
(Makrokonstante)
erzeugt eine Zufallszahl im angegebenen Bereich
(Funktionstemplate)