Namespaces
Variants

rand

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

Retourne une valeur entière pseudo-aléatoire entre 0 et RAND_MAX ( 0 et RAND_MAX inclus).

srand() initialise le générateur de nombres pseudo-aléatoires utilisé par rand() . Si rand() est utilisé avant tout appel à srand() , rand() se comporte comme s'il était initialisé avec srand ( 1 ) . Chaque fois que rand() est initialisé avec srand() , il doit produire la même séquence de valeurs.

rand() n'est pas garanti d'être thread-safe.

Table des matières

Paramètres

(aucun)

Valeur de retour

Valeur entière pseudo-aléatoire entre 0 et RAND_MAX , inclusivement.

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 concernant 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, comme la cryptographie.

POSIX exige que la période du générateur de nombres pseudo-aléatoires utilisé par rand soit d'au moins 2 32
.

POSIX a proposé une version thread-safe de rand appelée rand_r , qui est obsolète en faveur de la famille de fonctions drand48 .

Exemple

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
    srand(time(NULL)); // utiliser l'heure actuelle comme graine pour le générateur aléatoire
    int random_variable = rand();
    printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable);
    // lancer un dé à 6 faces 20 fois
    for (int n=0; n != 20; ++n) {
        int x = 7;
        while(x > 6) 
            x = 1 + rand()/((RAND_MAX + 1u)/6); // Note : 1+rand()%6 est biaisé
        printf("%d ",  x); 
    }
}

Sortie possible :

Random value on [0,2147483647]: 448749574
3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1

Références

  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.22.2.1 La fonction rand (p: 252)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.22.2.1 La fonction rand (p: 346)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.20.2.1 La fonction rand (p: 312)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.10.2.1 La fonction rand

Voir aussi

initialise le générateur de nombres pseudo-aléatoires
(fonction)
valeur maximale possible générée par rand ( )
(constante macro)