Namensräume
Varianten
Aktionen

std::uniform_real_distribution

Von cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
 
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

erzeugt neue Verteilung
(public member function) [edit]
(C++11)
setzt den internen Zustand der Verteilung zurück
(public member function) [edit]
Generierung
erzeugt die nächste Zufallszahl in der Verteilung
(public member function) [edit]
Eigenschaften des Generators
(C++11)
gibt die Verteilungsparameter zurück
(public member function) [edit]
(C++11)
holt oder setzt das Parameterobjekt der Verteilung
(public member function) [edit]
(C++11)
gibt den minimalen potenziell generierten Wert zurück
(public member function) [edit]
(C++11)
gibt den maximalen potenziell generierten Wert zurück
(public member function) [edit]

[bearbeiten] Nicht-Member-Funktionen

(C++11)(C++11)(entfernt in C++20)
vergleicht zwei Verteilungsobjekte
(function) [bearbeiten]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlendistributionen durch
(function template) [edit]

[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.