Maison > développement back-end > C++ > Comment générer des nombres aléatoires normalement distribués en C/C ?

Comment générer des nombres aléatoires normalement distribués en C/C ?

Susan Sarandon
Libérer: 2024-11-27 16:51:12
original
372 Les gens l'ont consulté

How to Generate Normally Distributed Random Numbers in 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;
}
Copier après la connexion

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!

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