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
Susan Sarandonoriginal
2024-11-27 16:51:12314parcourir

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

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:
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