Maison >développement back-end >C++ >Comment puis-je générer des nombres aléatoires véritablement uniformes dans une plage spécifique en C ?
Pour générer des nombres aléatoires dans un intervalle spécifié [min, max ] uniformément, les lignes directrices suivantes doivent être considéré :
Utiliser rand() et l'opérateur modulo, comme démontré dans l'extrait de code donné, peut ne pas produire de nombres aléatoires uniformément distribués. Cela dépend de la plage et de la valeur de RAND_MAX.
Avec C 11, vous peut utiliser std::uniform_int_distribution pour générer des nombres aléatoires dans un range:
#include <iostream> #include <random> int main() { const int range_from = 0; const int range_to = 1000; std::random_device rand_dev; std::mt19937 generator(rand_dev()); std::uniform_int_distribution<int> distr(range_from, range_to); std::cout << distr(generator) << '\n'; }
C 11 fournit des générateurs de nombres aléatoires supplémentaires avec diverses distributions, telles que comme Bernoulli, Poisson et normal.
Pour mélanger un conteneur de manière aléatoire, utilisez std::shuffle:
#include <iostream> #include <random> #include <vector> int main() { std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator); std::for_each(vec.begin(), vec.end(), [](auto i){std::cout << i << '\n';}); }
Si C 11 n'est pas disponible, vous pouvez utiliser Boost.Random, qui propose une interface similaire à la génération de nombres aléatoires de C 11 installations.
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!