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
Libérer: 2024-12-24 11:06:18
original
273 Les gens l'ont consulté

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);
Copier après la connexion

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);
Copier après la connexion

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