Maison >développement back-end >C++ >Comment C 11 améliore-t-il la génération de nombres aléatoires ?

Comment C 11 améliore-t-il la génération de nombres aléatoires ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 01:17:09927parcourir

How Does C  11 Improve Random Number Generation?

Génération de nombres aléatoires en C 11 : une explication complète

Contexte

C 11 a introduit de nouvelles fonctionnalités pour générer des nombres aléatoires, visant à améliorer la flexibilité, performances et cohérence. Ces fonctionnalités incluent des moteurs et des distributions de nombres aléatoires, qui répondent aux limites des générateurs de nombres aléatoires traditionnels comme rand().

Moteurs de nombres aléatoires

Les moteurs sont au cœur de la génération de nombres aléatoires. Ils génèrent des séquences de nombres pseudo-aléatoires et assurent l’uniformité de la distribution. C 11 propose plusieurs options de moteur, notamment :

  • Générateur congruentiel linéaire (LCG) : un algorithme classique avec une période limitée.
  • Mersenne Twister (MT) : Un choix populaire avec une longue période et une bonne distribution propriétés.

Distributions

Les distributions décrivent la distribution de nombres aléatoires souhaitée. C 11 comprend des distributions pour générer :

  • Entiers uniformes : distribution uniforme sur une plage.
  • Distribution normale/gaussienne : distribution avec une moyenne et un écart type spécifiés.

Comment générer des nombres aléatoires

Pour générer des nombres aléatoires en C 11, suivez ces étapes :

  1. Configurer un moteur : Choisissez un moteur et attribuez-lui une valeur de départ unique.
  2. Créez des distributions : Définissez distributions en fonction des propriétés souhaitées.
  3. Générer des nombres aléatoires : utilisez le moteur pour générer des nombres aléatoires nombres selon la distribution spécifiée.

Exemple de code

#include <random>

// Engine
std::mt19937 rng(std::random_device()());

// Distributions
std::uniform_int_distribution<uint32_t> uint_dist;
std::normal_distribution<double> normal_dist(0.5, 0.2);

// Generate random numbers
while (true)
{
  std::cout << uint_dist(rng) << " "
            << normal_dist(rng) << std::endl;
}

Importance des résultats tout aussi probables

Les résultats tout aussi probables garantissent que chaque nombre dans la plage spécifiée a la même chance d'être généré, évitant les biais dans la génération de nombres aléatoires. Les distributions appropriées, telles que celles fournies dans , y parviennent en transformant les entiers aléatoires uniformes générés en la distribution souhaitée.

Considérations sur la concurrence

La génération de nombres aléatoires en C 11 prend en charge la concurrence. Pour garantir la sécurité des threads, attribuez à chaque thread son propre moteur avec une graine unique ou synchronisez l'accès à l'objet moteur.

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