std:: random_device
|
Definiert im Header
<random>
|
||
|
class
random_device
;
|
(seit C++11) | |
std::random_device
ist ein gleichmäßig verteilter Ganzzahl-Zufallszahlengenerator, der nicht-deterministische Zufallszahlen erzeugt.
std::random_device
kann in Form eines implementierungsdefinierten Pseudozufallszahlengenerators implementiert werden, falls der Implementierung keine nicht-deterministische Quelle (z.B. eine Hardware-Komponente) zur Verfügung steht. In diesem Fall kann jedes
std::random_device
Objekt die gleiche Zahlenfolge erzeugen.
Inhaltsverzeichnis |
Mitgliedertypen
| Mitgliedertyp | Definition |
result_type
(C++11)
|
unsigned int |
Memberfunktionen
Konstruktion |
|
|
konstruiert die Engine
(public member function) |
|
|
operator=
(deleted)
(C++11)
|
der Zuweisungsoperator ist gelöscht
(public member function) |
Generierung |
|
|
bewegt den Zustand der Engine vor und gibt den generierten Wert zurück
(public member function) |
|
Eigenschaften |
|
|
(C++11)
|
ermittelt die Entropie-Schätzung für den nicht-deterministischen Zufallszahlengenerator
(public member function) |
|
[static]
|
ermittelt den kleinstmöglichen Wert im Ausgabebereich
(public static member function) |
|
[static]
|
ermittelt den größtmöglichen Wert im Ausgabebereich
(public static member function) |
Hinweise
Eine bemerkenswerte Implementierung, bei der
std::random_device
in alten Versionen von MinGW-w64 deterministisch ist (
Bug 338
, behoben seit GCC 9.2). Die neuesten MinGW-w64-Versionen können von
GCC mit dem MCF-Thread-Modell
heruntergeladen werden.
Beispiel
#include <iostream> #include <map> #include <random> #include <string> int main() { std::random_device rd; std::map<int, int> hist; std::uniform_int_distribution<int> dist(0, 9); for (int n = 0; n != 20000; ++n) ++hist[dist(rd)]; // note: demo only: the performance of many // implementations of random_device degrades sharply // once the entropy pool is exhausted. For practical use // random_device is generally only used to seed // a PRNG such as mt19937 for (auto [x, y] : hist) std::cout << x << " : " << std::string(y / 100, '*') << '\n'; }
Mögliche Ausgabe:
0 : ******************** 1 : ******************* 2 : ******************** 3 : ******************** 4 : ******************** 5 : ******************* 6 : ******************** 7 : ******************** 8 : ******************* 9 : ********************