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

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-23 00:55:16931Durchsuche

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)

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;
}

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:

  • 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!

Stellungnahme:
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