Maison >développement back-end >C++ >Comment puis-je générer des écarts normaux aléatoires en C/C à l'aide de la transformation Box-Muller ?

Comment puis-je générer des écarts normaux aléatoires en C/C à l'aide de la transformation Box-Muller ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 18:48:15785parcourir

How Can I Generate Random Normal Deviates in C/C   Using the Box-Muller Transform?

Génération d'écarts normaux aléatoires dans C/C

Générer des nombres aléatoires qui suivent une distribution normale est une tâche courante dans diverses applications. En C/C, il existe plusieurs approches pour y parvenir sans recourir à des bibliothèques externes comme Boost.

Une méthode largement utilisée est la transformée de Box-Muller, qui transforme deux nombres aléatoires uniformément distribués en une paire de nombres normalement distribués. nombres aléatoires. La formule mathématique est la suivante :

x = sqrt(-2 * ln(u1)) * cos(2 * M_PI * u2)
y = sqrt(-2 * ln(u1)) * sin(2 * M_PI * u2)

où u1 et u2 sont des nombres aléatoires uniformément distribués dans la plage [0, 1]. Pour générer un seul écart normal aléatoire, générez une paire à l'aide de la transformation Box-Muller et renvoyez l'une d'elles, en stockant l'autre pour une utilisation ultérieure.

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