Nombres aléatoires avec l’en-tête random
Générer des nombres aléatoires de qualité avec des moteurs et des distributions modernes
Nombres aléatoires avec l’en-tête random est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Pourquoi pas rand() ?
La fonction C historique std::rand() utilise un état global, offre une qualité statistique médiocre et n’est pas sûre pour les threads. Le C++ moderne fournit de bien meilleurs outils dans <random>.
La recette en trois éléments
Les nombres aléatoires en C++ moderne reposent sur trois éléments :
- Une source de graine (entropie véritable)
- Un moteur générateur (état déterministe)
- Une distribution (qui façonne la sortie)
Initialisation avec random_device
std::random_device échantillonne une véritable entropie du OS — mais cela peut être lent. Utilisez-le une fois pour initialiser un moteur rapide.
#include <random>
std::random_device rd;
std::mt19937 engine(rd());Le moteur mt19937
std::mt19937 (Mersenne Twister) est un moteur pseudo-aléatoire rapide offrant une excellente qualité statistique. C’est le choix par défaut pour la plupart des applications.
Distribution uniforme d’entiers
Produit des entiers distribués uniformément dans un intervalle fermé.
std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);Distribution uniforme de réels
Pour les nombres à virgule flottante dans un intervalle semi-ouvert [a, b).
std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);Distribution normale (gaussienne)
Pour des nombres aléatoires selon une courbe en cloche — courants dans les simulations et l’apprentissage automatique.
std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);Autres distributions
La bibliothèque en inclut beaucoup d’autres : bernoulli_distribution, poisson_distribution, exponential_distribution, discrete_distribution, et bien d’autres.
Aléatoire reproductible
Pour les tests, initialisez le moteur avec une valeur fixe afin d’obtenir la même séquence à chaque exécution.
std::mt19937 engine(42);
// Same output every time you run the programMélange aléatoire
Mélangez un conteneur avec std::shuffle, qui accepte n’importe quel moteur.
#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);Piège : réinitialiser dans une boucle
Ne créez pas un nouveau random_device ou moteur pour chaque nombre aléatoire. Construisez un moteur et réutilisez-le lors des différents appels.
Vérification rapide
Quelle est la manière moderne la plus sûre d’initialiser un moteur pseudo-aléatoire en C++ ?
Récapitulatif
L’aléatoire en C++ moderne utilise random_device pour l’initialisation, mt19937 comme moteur et une distribution comme uniform_int_distribution pour façonner la sortie. Réutilisez le moteur — n’en créez jamais un par appel.
Questions Fréquemment Posées
La leçon « Nombres aléatoires avec l’en-tête random » est-elle gratuite ?
Oui — le texte complet de « Nombres aléatoires avec l’en-tête random » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Nombres aléatoires avec l’en-tête random » ?
Générer des nombres aléatoires de qualité avec des moteurs et des distributions modernes Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Nombres aléatoires avec l’en-tête random » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Types entiers et à virgule flottante
- L’en-tête cmath : pow, sqrt, abs, round
- Nombres aléatoires avec l’en-tête random
- Limites numériques et comportement en cas de dépassement