Maison >développement back-end >C++ >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 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-24 11:06:18169parcourir

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 l'uniformité distribution, car son comportement dépend de RAND_MAX et de la gamme elle-même.

C 11 et Uniform Range Generation

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

#include <random>

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

int random_number = distr(generator);

Fonctionnalités supplémentaires de

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

Container Shuffling

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

#include <random>
#include <vector>

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);

Boost.Random

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

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