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

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

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 15:01:09201parcourir

How Can I Generate Truly Unbiased Random Integers in C  ?

Génération d'entiers aléatoires non biaisés avec std::random_device

Dans la quête de génération d'entiers aléatoires uniformément distribués, la préoccupation initiale vient des lacunes d'utiliser rand(). Pour résoudre ces problèmes, la bibliothèque standard C fournit une solution plus robuste et plus efficace.

Le fondement de la génération de nombres aléatoires réside dans l'utilisation d'un moteur de nombres aléatoires alimenté par une source externe. Dans ce cas, std::random_device sert de mécanisme d'amorçage, fournissant une valeur initiale non déterministe qui sera utilisée pour générer des nombres aléatoires ultérieurs.

Le choix préféré pour le moteur de nombres aléatoires est std::mt19937. , en utilisant l'algorithme de Mersenne-Twister. Ce moteur présente d'excellentes propriétés statistiques et s'est avéré très performant.

Pour générer des entiers aléatoires impartiaux dans une plage spécifiée, nous utilisons std::uniform_int_distribution. Cette distribution garantit que toutes les valeurs de la plage ont une probabilité égale d'être sélectionnées.

Le code ci-dessous résume ces concepts :

#include <random>

std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> uni(min, max);

auto random_integer = uni(rng);

En utilisant cette approche, les développeurs peuvent avoir confiance dans l'uniformité de leurs entiers générés aléatoirement, éliminant tout biais potentiel et garantissant des résultats fiables et prévisibles.

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