Heim > Artikel > Backend-Entwicklung > Wie generiert man normalverteilte Zufallszahlen in C/C ohne Boost?
Frage:
Wie erzeuge ich ganz einfach Zufallszahlen? einer Normalverteilung in C oder C folgen, ohne Boost zu verwenden Bibliotheken?
Antwort:
Box-Muller-Transformation
Die Box-Muller-Transformation ist eine weit verbreitete Methode zum Generieren normalverteilte Zahlen aus einem einheitlichen Zufallszahlengenerator. Es werden Werte erzeugt, die genau einer Gaußschen Verteilung entsprechen.
Die mathematische Formel für die Box-Muller-Transformation lautet wie folgt:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
wobei:
Implementierung:
Um die Box-Muller-Transformation in C/C zu implementieren, können Sie den folgenden Code verwenden:
#include <cmath> #include <random> double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution<double> dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
Verwendung:
Um eine normalverteilte Zufallszahl zu generieren, rufen Sie einfach auf die Funktion box_muller():
double random_number = box_muller();
Der Wert von random_number ist eine Gauß-verteilte Zufallsvariable mit Mittelwert 0 und Standardabweichung 1.
Hinweis:
Das obige ist der detaillierte Inhalt vonWie generiert man normalverteilte Zufallszahlen in C/C ohne Boost?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!