Maison > développement back-end > C++ > Comment pouvons-nous générer des entiers aléatoires véritablement uniformément distribués dans une plage spécifiée ?

Comment pouvons-nous générer des entiers aléatoires véritablement uniformément distribués dans une plage spécifiée ?

Barbara Streisand
Libérer: 2024-12-20 15:43:17
original
186 Les gens l'ont consulté

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

Génération d'entiers aléatoires uniformément distribués

Dans de nombreuses applications de programmation, générer des entiers aléatoires dans une plage spécifiée est une exigence courante. Cependant, garantir que ces entiers sont uniformément distribués présente un défi. Cet article explore diverses approches pour parvenir à une distribution uniforme.

Code existant et limitations

Le code fourni par l'utilisateur exploite la fonction rand() pour générer des nombres aléatoires dans un plage donnée. Cependant, cette approche souffre d'un manque d'uniformité, en particulier pour les petites plages telles que <0, 1>. Ceci est attribué à la faible probabilité que rand() renvoie RAND_MAX, la valeur maximale.

Formule proposée

Pour résoudre ce problème, l'utilisateur a conçu une nouvelle formule :

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
Copier après la connexion

Bien que cette formule vise à améliorer l'uniformité, elle reste insuffisante, comme en témoigne l'échantillonnage data.

Solution de bibliothèque standard C

La bibliothèque standard C fournit une solution élégante et fiable à ce problème. L'en-tête std::random comprend un ensemble de générateurs et de distributions de nombres aléatoires qui peuvent générer des nombres aléatoires avec une distribution uniforme.

#include <random>

// Initialize random-number engine with a seed
std::random_device rd;
std::mt19937 rng(rd());

// Define uniform integer distribution
std::uniform_int_distribution<int> uni(min, max);

// Generate random integer within range
auto random_integer = uni(rng);
Copier après la connexion

Cette approche exploite un code bien testé et optimisé, garantissant une distribution et une efficacité uniformes. Cela élimine le besoin de réinventer la roue et les préoccupations concernant les préjugés ou les valeurs de départ.

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