Maison > développement back-end > C++ > Comment générer des nombres aléatoires normalement distribués en C/C à l'aide de la transformation Box-Muller ?

Comment générer des nombres aléatoires normalement distribués en C/C à l'aide de la transformation Box-Muller ?

Linda Hamilton
Libérer: 2024-11-30 12:19:26
original
346 Les gens l'ont consulté

How to Generate Normally Distributed Random Numbers in C/C   using the Box-Muller Transform?

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)
Copier après la connexion

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 :

  1. Inclure l'en-tête de bibliothèque standard pour accéder à la fonction rand().
  2. Définissez une fonction pour générer un double aléatoire uniforme suivant une plage [0, 1). Cela peut être fait en utilisant :
double rand0to1() {
    return rand() / (RAND_MAX + 1.0);
}
Copier après la connexion
  1. Implémentez la fonction de transformation Box-Muller :
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};
}
Copier après la connexion
  1. Appelez la fonction box_muller pour générer nombres aléatoires normalement distribués selon les besoins.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal