Namensräume
Varianten
Aktionen

std::rand

Von cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
Definiert in Header <cstdlib>
int rand();

Gibt einen pseudo-zufälligen ganzzahligen Wert im Bereich [0RAND_MAX] zurück.

std::srand() initialisiert den Pseudo-Zufallszahlengenerator, der von rand() verwendet wird. Wenn rand() vor irgendeinem Aufruf von std::srand() verwendet wird, verhält sich rand() so, als ob es mit std::srand(1) initialisiert worden wäre.

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

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

Es ist implementierungsabhängig, ob rand() Thread-sicher ist.

Inhalt

[bearbeiten] Rückgabewert

Pseudo-zufälliger ganzzahliger Wert zwischen 0 und RAND_MAX.

[bearbeiten] Hinweise

Es gibt keine Garantien für die 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 zwischen den Aufrufen).

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

[bearbeiten] Beispiel

Die untenstehende Funktion bounded_rand() 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

[bearbeiten] Siehe auch

erzeugt ganzzahlige Werte, die gleichmäßig über einen Bereich verteilt sind
(Klassenschablone) [bearbeiten]
initialisiert Pseudozufallszahlengenerator
(Funktion) [edit]
maximal möglicher Wert, der von std::rand erzeugt wird
(Makrokonstante) [edit]
Generiert eine Zufallszahl im angegebenen Bereich.
(Funktionstemplate) [bearbeiten]
C-Dokumentation für rand