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#include 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 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 die Funktion box_muller() auf:
double random_number = box_muller();
Der Wert von random_number ist eine Gauß-verteilte Zufallsvariable mit Mittelwert 0 und Standardabweichung 1.
Hinweis:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3