"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je générer des nombres aléatoires uniformément distribués dans une plage spécifique en C++ ?

Comment puis-je générer des nombres aléatoires uniformément distribués dans une plage spécifique en C++ ?

Publié le 2024-12-21
Parcourir:954

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

Génération de nombres aléatoires uniformes sur une plage

Vous recherchez une méthode pour générer uniformément des nombres aléatoires dans une plage spécifiée [min, max].

Défauts avec rand

Votre implémentation actuelle utilisant rand() et l'opérateur module peut ne pas garantir une distribution uniforme, car son comportement dépend de RAND_MAX et du range elle-même.

C 11 et Uniform Range Generation

En C 11, std::uniform_int_distribution propose une solution adaptée à ce besoin :

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

Fonctionnalités supplémentaires de

L'en-tête fournit une vaste gamme de générateurs de nombres aléatoires avec des distributions variables, telles que comme Bernoulli, Poisson et normal.

Container Shuffling

Pour mélanger un conteneur, utilisez std::shuffle:

#include 
#include 

std::vector vec = {4, 8, 15, 16, 23, 42};
std::random_device random_dev;
std::mt19937 generator(random_dev());

std::shuffle(vec.begin(), vec.end(), generator);

Boost.Random

Si l'utilisation d'un compilateur C 11 n'est pas réalisable , pensez à Boost.Random, qui présente une interface similaire à celle de son homologue C 11.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3