„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie generiert man normalverteilte Zufallszahlen in C/C++ ohne Boost?

Wie generiert man normalverteilte Zufallszahlen in C/C++ ohne Boost?

Veröffentlicht am 23.11.2024
Durchsuche:691

How to Generate Normally Distributed Random Numbers in C/C   Without Boost?

Generieren von Zufallszahlen mit einer Normalverteilung in C/C

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:

  • U1 und U2 sind gleichmäßig verteilte Zufallszahlen zwischen 0 und 1
  • x und y sind normalverteilte Zufallszahlen mit Mittelwert 0 und Standardabweichung 1

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:

  • Die Box-Muller-Transformation erzeugt auch ein zweites Ergebnis, y, aber dieses kann verworfen oder zur späteren Verwendung gespeichert werden.
  • Wenn Sie normalverteilte Zahlen mit einem anderen Mittelwert als 0 oder einer anderen Standardabweichung als 1 generieren müssen, können Sie das Ergebnis mit a multiplizieren Konstante.
Neuestes Tutorial Mehr>

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