Question :
Comment générer facilement des nombres aléatoires suivre une distribution normale en C ou C sans utiliser Boost bibliothèques ?
Réponse :
Transformation de Box-Muller
La transformation de Box-Muller est une méthode largement utilisée pour générer nombres normalement distribués à partir d’un générateur de nombres aléatoires uniformes. Il produit des valeurs qui adhèrent avec précision à une distribution gaussienne.
La formule mathématique de la transformation de Box-Muller est la suivante :
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
où :
Implémentation :
Pour implémenter la transformation Box-Muller en C/C , vous pouvez utiliser le code suivant :
#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; }
Utilisation :
Pour générer un nombre aléatoire normalement distribué, appelez simplement le Fonction box_muller() :
double random_number = box_muller();
La valeur de random_number sera une variable aléatoire distribuée gaussienne avec une moyenne de 0 et un écart type de 1.
Remarque :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!