Generieren von Zufallszahlen mithilfe der Normalverteilung in C/C
In verschiedenen Programmieranwendungen entsteht häufig die Notwendigkeit, Zufallszahlen nach einer Normalverteilung zu generieren . In C/C gibt es mehrere Techniken, mit denen Sie dies erreichen können.
Ein weit verbreiteter Ansatz ist die Box-Muller-Transformation. Bei dieser Methode werden zwei unabhängige gleichmäßige Zufallszahlen generiert und mithilfe einer mathematischen Formel transformiert, um normalverteilte Werte zu erhalten. Die Box-Muller-Transformation ist mathematisch streng und liefert genaue Ergebnisse.
So implementieren Sie die Box-Muller-Transformation in C/C:
#include <random> #include <cmath> // Generate a random number following a Gaussian distribution double normal_rand() { static double z1; static bool ready = false; // If z1 is not ready, generate two uniform random numbers if (!ready) { double u1 = std::uniform_real_distribution<double>(0, 1)(); double u2 = std::uniform_real_distribution<double>(0, 1)(); z1 = std::sqrt(-2 * std::log(u1)) * std::cos(2 * M_PI * u2); ready = true; } // Return z1 and mark it as used ready = false; return z1; }
Im obigen Beispiel std:: uniform_real_distribution generiert einheitliche Zufallszahlen, während std::sqrt und std::cos die notwendigen mathematischen Aufgaben übernehmen Transformationen.
Die Verwendung der Box-Muller-Transformation bietet eine einfache und zuverlässige Möglichkeit, Zufallszahlen zu generieren, die einer Normalverteilung in C/C folgen. Durch den Einsatz dieser Technik können Programmierer die Verwendung externer Bibliotheken wie Boost vermeiden und die Funktionalität der Standard-C-Bibliothek nutzen.
Das obige ist der detaillierte Inhalt vonWie generiert man normalverteilte Zufallszahlen in C/C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!