std:: rand
|
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
|
(C++11)
|
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) |
|
|
C-Dokumentation
für
rand
|
|