Heim > Backend-Entwicklung > C++ > Wie generiert man normalverteilte Zufallszahlen in C/C ohne Boost?

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

Patricia Arquette
Freigeben: 2024-11-23 00:55:16
Original
971 Leute haben es durchsucht

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

Zufallszahlen mit einer Normalverteilung in C/C generieren

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)
Nach dem Login kopieren

wobei:

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

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;
}
Nach dem Login kopieren

Verwendung:

Um eine normalverteilte Zufallszahl zu generieren, rufen Sie einfach auf die Funktion box_muller():

double random_number = box_muller();
Nach dem Login kopieren

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 für später gespeichert werden verwenden.
  • 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 einer Konstanten multiplizieren.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage