std::uniform_real_distribution
| Definiert in Header <random> |
||
| template< class RealType = double > class uniform_real_distribution; |
(seit C++11) | |
Erzeugt Zufallswert-Gleitkommazahlen x, gleichmäßig verteilt auf dem Intervall [a, b), d. h. verteilt gemäß der Wahrscheinlichkeitsdichtefunktion
- P(x|a,b) =
.1 b − a
std::uniform_real_distribution erfüllt alle Anforderungen von RandomNumberDistribution.
Inhalt |
[bearbeiten] Template-Parameter
| RealType | - | Der Rückgabetyp, der vom Generator erzeugt wird. Die Wirkung ist undefiniert, wenn dies nicht einer der Typen float, double oder long double ist. |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
result_type(C++11) |
RealType |
param_type (C++11) |
Der Typ des Parametersets, siehe RandomNumberDistribution. |
[bearbeiten] Member-Funktionen
| (C++11) |
erzeugt neue Verteilung (public member function) |
| (C++11) |
setzt den internen Zustand der Verteilung zurück (public member function) |
Generierung | |
| (C++11) |
erzeugt die nächste Zufallszahl in der Verteilung (public member function) |
Eigenschaften des Generators | |
| (C++11) |
gibt die Verteilungsparameter zurück (public member function) |
| (C++11) |
holt oder setzt das Parameterobjekt der Verteilung (public member function) |
| (C++11) |
gibt den minimalen potenziell generierten Wert zurück (public member function) |
| (C++11) |
gibt den maximalen potenziell generierten Wert zurück (public member function) |
[bearbeiten] Nicht-Member-Funktionen
| (C++11)(C++11)(entfernt in C++20) |
vergleicht zwei Verteilungsobjekte (function) |
| (C++11) |
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlendistributionen durch (function template) |
[bearbeiten] Anmerkungen
Es ist schwierig, eine Verteilung über das geschlossene Intervall [a, b] aus dieser Verteilung zu erstellen. Die Verwendung von std::nextafter(b, std::numeric_limits<RealType>::max()) als zweiten Parameter funktioniert aufgrund von Rundungsfehlern nicht immer.
Die meisten vorhandenen Implementierungen haben einen Fehler, bei dem sie gelegentlich b zurückgeben können (GCC #63176 LLVM #18767 MSVC STL #1074). Dies trat ursprünglich nur auf, wenn RealType float war und LWG-Problem 2524 (LWG issue 2524) vorlag, aber es wurde inzwischen gezeigt, dass keines davon erforderlich ist, um den Fehler auszulösen.
[bearbeiten] Beispiel
Drucke 10 Zufallszahlen zwischen 1 und 2.
#include <iostream> #include <random> int main() { std::random_device rd; // Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd() std::uniform_real_distribution<> dis(1.0, 2.0); for (int n = 0; n < 10; ++n) // Use dis to transform the random unsigned int generated by gen into a // double in [1, 2). Each call to dis(gen) generates a new random double. std::cout << dis(gen) << ' '; std::cout << '\n'; }
Mögliche Ausgabe
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326
[bearbeiten] Externe Links
| Ziehen von Zufallswert-Gleitkommazahlen aus einem Intervall — © 2022. Frédéric Goualard, Université de Nantes. |