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

Wie generiert man normalverteilte Zufallszahlen in C/C?

Susan Sarandon
Freigeben: 2024-11-27 16:51:12
Original
344 Leute haben es durchsucht

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

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

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!

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