Namespaces
Variants

std:: rand

From cppreference.net
Défini dans l'en-tête <cstdlib>
int rand ( ) ;

Retourne une valeur entière pseudo-aléatoire dans l'intervalle [ 0 , RAND_MAX ] .

std::srand() initialise le générateur de nombres pseudo-aléatoires utilisé par rand() . Si rand() est utilisé avant tout appel à std::srand() , rand() se comporte comme s'il avait été initialisé avec std:: srand ( 1 ) .

Chaque fois que rand() est initialisé avec std::srand() , il doit produire la même séquence de valeurs lors des appels successifs.

D'autres fonctions dans la bibliothèque standard peuvent appeler rand . Il est défini par l'implémentation quelles fonctions le font.

Il est défini par l'implémentation si rand() est thread-safe.

Table des matières

Valeur de retour

Valeur intégrale pseudo-aléatoire entre 0 et RAND_MAX .

Notes

Il n'y a aucune garantie quant à la qualité de la séquence aléatoire produite. Par le passé, certaines implémentations de rand() présentaient des défauts sérieux dans l'aléatoire, la distribution et la période de la séquence produite (dans un exemple bien connu, le bit de poids faible alternait simplement entre 1 et 0 entre les appels).

rand() n'est pas recommandé pour des besoins sérieux de génération de nombres aléatoires. Il est recommandé d'utiliser les fonctionnalités de génération de nombres aléatoires de C++11 pour remplacer rand() . (depuis C++11)

Exemple

La fonction bounded_rand() ci-dessous est une version adaptée de Debiased Modulo (Once) .

#include <cstdlib>
#include <ctime>
#include <initializer_list>
#include <iostream>
unsigned bounded_rand(unsigned range)
{
    for (unsigned x, r;;)
        if (x = rand(), r = x % range, x - r <= -range)
            return r;
}
int main() 
{
    std::srand(std::time({})); // utilise l'heure actuelle comme graine pour le générateur aléatoire
    const int random_value = std::rand();
    std::cout << "Valeur aléatoire sur [0, " << RAND_MAX << "]: " << random_value << '\n';
    for (const unsigned sides : {2, 4, 6, 8})
    {
        std::cout << "Lancer un dé à " << sides << " faces 8 fois : ";
        for (int n = 8; n; --n)
            std::cout << 1 + bounded_rand(sides) << ' ';
        std::cout << '\n';
    }
}

Sortie possible :

Random value on [0, 2147483647]: 948298199
Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 
Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 
Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 
Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2

Voir aussi

produit des valeurs entières uniformément réparties sur une plage
(modèle de classe)
initialise le générateur de nombres pseudo-aléatoires
(fonction)
valeur maximale possible générée par std::rand
(constante macro)
génère un entier aléatoire dans la plage spécifiée
(modèle de fonction)