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 Box-Muller
La transformation 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#include 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 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 la 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 1.
Remarque :
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3