Générer des nombres aléatoires normalement distribués en C/C
Générer des nombres aléatoires qui adhèrent à une distribution normale en C ou C est une tâche fréquente dans diverses applications informatiques et statistiques. Ceci peut être réalisé efficacement en utilisant la transformée de Box-Muller, une technique largement utilisée qui exploite deux nombres aléatoires uniformes pour produire une paire de nombres normalement distribués.
La transformation de Box-Muller repose sur une formule mathématique simple :
x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2) y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)
où u1 et u2 sont deux nombres aléatoires uniformes indépendants générés dans la plage [0, 1]. Ces deux équations définissent deux variables aléatoires indépendantes, x et y, qui suivent une distribution normale avec une moyenne nulle et une variance unitaire.
Pour mettre en œuvre cette méthode en C/C, les étapes suivantes peuvent être suivies :
double rand0to1() { return rand() / (RAND_MAX + 1.0); }
pair<double, double> box_muller() { double u1 = rand0to1(); double u2 = rand0to1(); double x = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2); double y = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2); return {x, y}; }
Cette méthode génère efficacement des nombres aléatoires qui suivent une distribution normale sans le besoin de bibliothèques externes.
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!