Maison >développement back-end >C++ >Comment puis-je générer des nombres aléatoires véritablement uniformes en C ?

Comment puis-je générer des nombres aléatoires véritablement uniformes en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 19:42:11687parcourir

How Can I Generate Truly Uniform Random Numbers in C  ?

Générer des nombres aléatoires uniformément sur une plage entière

Vous cherchez à générer des nombres aléatoires uniformément répartis dans un intervalle spécifié, [min, max]. Cependant, votre méthode actuelle produit des nombres regroupés autour d'un seul point.

Éviter rand()

La fonction rand() est souvent peu fiable pour générer des distributions uniformes. Il s'appuie sur un opérateur de module qui peut introduire des biais.

C 11 Uniform Distribution

En C 11, pensez à utiliser std::uniform_int_distribution pour une solution plus fiable :

#include <iostream>
#include <random>

int main()
{    
    const int range_from  = min;
    const int range_to    = max;
    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';
}

Autres générateurs aléatoires

La bibliothèque C 11 propose divers autres générateurs aléatoires avec différentes distributions. Par exemple, std::shuffle peut réorganiser de manière aléatoire les éléments d'un conteneur.

Alternative Boost.Random

Si C 11 n'est pas disponible, envisagez d'utiliser Boost.Random, qui fournit des fonctionnalités similaires.

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