Maison >développement back-end >C++ >Comment puis-je générer des entiers aléatoires uniformément distribués en C ?
Lors du développement de logiciels, la génération d'entiers aléatoires dans une plage spécifiée est une tâche courante. Cependant, trouver un générateur de nombres aléatoires rapide et uniformément distribué peut s’avérer difficile. Dans cet article, nous abordons ce problème en explorant diverses approches pour générer des entiers aléatoires dans une plage donnée.
Une méthode courante pour générer des entiers aléatoires consiste à utiliser rand() fonction. Cependant, comme indiqué dans la question initiale, rand() peut conduire à une distribution biaisée, notamment pour les petites plages.
Pour résoudre ce problème, une formule alternative a été proposée :
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
Bien que cette formule fournisse une distribution plus uniforme, elle ne répond toujours pas à toutes les exigences, à savoir la vitesse, la distribution uniforme, les plages variables et la possibilité d'amorçage.
Présentation de la fonction de bibliothèque standard C std::uniform_int_distribution et de son générateur de nombres aléatoires associé std::mt19937. Cette approche est simple, rapide et fournit des résultats impartiaux.
#include <random> std::random_device rd; std::mt19937 rng(rd()); std::uniform_int_distribution<int> uni(min,max); auto random_integer = uni(rng);
Le std::random_device initialise le générateur avec une véritable source d'entropie, garantissant que les nombres générés sont imprévisibles et aléatoires. Le std::uniform_int_distribution définit la plage d'entiers à générer, garantissant que toutes les valeurs dans cette plage ont une probabilité égale d'être sélectionnées.
Cette approche remplit toutes les exigences :
En conclusion, l'approche la plus simple et la meilleure pour générer des entiers aléatoires uniformément distribués en C consiste à utiliser les fonctions std::uniform_int_distribution et std::mt19937. Cette approche exploite les algorithmes optimisés de la bibliothèque standard, garantissant à la fois vitesse et caractère aléatoire.
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!