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
Linda Hamiltonoriginal
2024-11-30 12:19:26368parcourir

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)

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);
}
  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};
}
  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!

Déclaration:
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