Maison >développement back-end >C++ >Comment générer des nombres aléatoires normalement distribués en C/C ?
Génération de nombres aléatoires à l'aide d'une distribution normale en C/C
Le besoin de générer des nombres aléatoires suivant une distribution normale survient souvent dans diverses applications de programmation . En C/C, vous pouvez utiliser plusieurs techniques pour y parvenir.
Une approche largement adoptée est la transformation de Box-Muller. Cette méthode consiste à générer deux nombres aléatoires uniformes indépendants et à les transformer à l'aide d'une formule mathématique pour obtenir des valeurs normalement distribuées. La transformation Box-Muller est mathématiquement rigoureuse et produit des résultats précis.
Voici comment implémenter la transformation Box-Muller en 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; }
Dans l'exemple ci-dessus, std :: uniform_real_distribution génère des nombres aléatoires uniformes, tandis que std::sqrt et std::cos effectuent les opérations mathématiques nécessaires transformations.
L'utilisation de la transformation Box-Muller fournit un moyen simple et fiable de générer des nombres aléatoires suivant une distribution normale dans C/C . En utilisant cette technique, les programmeurs peuvent éviter d'utiliser des bibliothèques externes comme Boost et exploiter les fonctionnalités de la bibliothèque C standard.
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!