RAND |
Aléatoire |
---|---|
Langage C | stdlib.h |
Syntaxe
int rand(void); |
Description
Cette fonction retourne un nombre pseudo-aléatoire entier.
Algorithme
MODULE RAND() * Algorithme générateur linéaire congruentiel (LCG) a ← 1664525 * Multiplieur c ← 1013904223 * Incrément m ← 232 * Modulo (taille de l'espace des entiers) * Récupérer la graine initiale (généralement définie par srand) seed ← get_seed_value() * Calculer le prochain nombre pseudo-aléatoire random_number ← (a x seed + c) modulo m * Mettre à jour la graine avec la valeur générée set_seed_value(random_number) * Retourner le nombre dans l'intervalle [0, RAND_MAX] RETOURNE random_number |
Remarques
- Génération de nombres aléatoires : La fonction rand est utilisée pour générer des nombres pseudo-aléatoires dans le langage C. Elle est définie dans la bibliothèque standard stdlib.h et permet de produire des nombres entiers dans un intervalle prédéfini. Le nombre retourné est un entier positif dont la valeur varie entre 0 et RAND_MAX.
- Intervalle de valeurs retournées : Le nombre généré par rand est compris entre 0 et RAND_MAX, une constante définie dans stdlib.h. La valeur exacte de RAND_MAX peut varier en fonction de l'implémentation du compilateur, mais elle est souvent définie comme étant 32767 sur de nombreux systèmes. Cela signifie que les valeurs retournées par rand sont limitées à cet intervalle.
- Pseudo-aléatoire et déterminisme : Bien que rand génère des nombres semblant aléatoires, il s'agit en réalité de nombres pseudo-aléatoires. Cela signifie que la séquence de nombres générée est déterministe et peut être reproduite si la fonction srand est utilisée avec une valeur de départ (seed) identique. Ainsi, les mêmes valeurs de départ produiront les mêmes suites de nombres pseudo-aléatoires.
- Initialisation de la séquence avec srand : Pour obtenir une séquence réellement aléatoire, il est essentiel d'initialiser le générateur de nombres aléatoires avec la fonction srand. Cette fonction prend un paramètre entier seed, servant de point de départ pour la génération de la séquence. Si srand n'est pas appelée, rand utilise une valeur par défaut, ce qui peut rendre la séquence de nombres récurrente sur chaque exécution du programme.
- Limitation de la qualité des nombres générés : La qualité des nombres générés par rand dépend de l'algorithme utilisé par l'implémentation spécifique du compilateur. Sur certains systèmes, l'algorithme de rand peut ne pas être suffisant pour des applications nécessitant des nombres aléatoires de haute qualité, comme en cryptographie. Dans de tels cas, des bibliothèques spécialisées ou des générateurs plus robustes, comme ceux disponibles dans <random> en C++ ou des bibliothèques tierces en C, peuvent être nécessaires.
- Utilisation de rand pour des probabilités : rand peut être utilisé pour simuler des tirages de nombres dans des situations probabilistes. Par exemple, pour générer un nombre aléatoire entre 0 et un nombre entier spécifique N, on peut utiliser l'expression rand() % N. Cependant, cette méthode n'est pas toujours idéale en raison des biais qui peuvent apparaître dans certains cas, surtout si RAND_MAX n'est pas un multiple de N.
- Limitations dans les applications critiques : L'utilisation de rand dans des applications nécessitant un haut degré d'aléa (comme en cryptographie) est déconseillée, car les nombres générés sont prédictibles si l'état initial du générateur est connu. Pour des applications sensibles, comme la génération de clefs cryptographiques, il est recommandé d'utiliser des générateurs de nombres aléatoires cryptographiquement sûrs fournis par des bibliothèques comme OpenSSL ou le générateur natif du système d'exploitation.
- Performance de rand : La fonction rand est généralement rapide et peut être utilisée dans des applications où la performance est essentielle et où des nombres pseudo-aléatoires suffisent. Cependant, il existe des algorithmes de génération de nombres aléatoires plus sophistiqués offrant une meilleure distribution statistique, au prix de performances parfois légèrement inférieures. rand reste suffisant pour de nombreuses applications, comme les simulations simples ou les jeux.
Exemple
Voici un exemple permettant d'afficher des nombres aléatoires :
Essayer maintenant !
on obtiendra le résultat semblable suivant :
Aleatoire entier = 41Aleatoire entier (0 a 9) = 7
Voir également
Langage de programmation - C - Référence de procédures et fonctions - srand
Langage de programmation - C++ - Référence de procédures et fonctions - rand
Langage de programmation - Perl - Référence de procédures et fonctions - rand
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 206.
Dernière mise à jour : Mardi, le 28 juillet 2015