RAND |
Aléatoire |
---|---|
Langage C++ | cstdlib (stdlib.h) |
Syntaxe
int rand(void) |
Description
Cette fonction retourne un nombre pseudo-aléatoire entier.
Remarques
- La fonction rand() génère une séquence de nombres pseudo-aléatoires. Chaque fois qu'il est appelé, un entier entre zéro et RAND_MAX est retourné.
- Définition et utilité : La fonction rand est définie dans la bibliothèque <cstdlib> (ou <stdlib.h>) et génère un nombre pseudo-aléatoire de type int. Elle est utilisée dans les programmes nécessitant des valeurs aléatoires, comme pour la simulation, les jeux ou le test de logiciels. Bien qu'elle ne soit pas cryptographiquement sécurisée, elle est suffisamment efficace pour des besoins courants de génération de nombres aléatoires dans des contextes non sensibles.
- Intervalle de valeurs générées : La valeur retournée par rand se situe dans l'intervalle de 0 à RAND_MAX. Si vous souhaitez restreindre l'intervalle à un intervalle spécifique, vous pouvez utiliser une expression arithmétique, par exemple :
- Problèmes de distribution uniforme : Bien que rand génère des nombres aléatoires, ceux-ci peuvent ne pas être parfaitement uniformes selon l'implémentation du générateur de nombres pseudo-aléatoires sous-jacent. Ce phénomène, parfois appelé "distribution non uniforme", peut rendre les valeurs produites par rand moins idéales pour certaines applications nécessitant une grande précision ou une vraie uniformité, comme dans la cryptographie ou la modélisation scientifique.
- Réinitialisation du générateur avec srand : La fonction rand génère une séquence déterminée de nombres pseudo-aléatoires, ce qui signifie que si vous appelez rand à plusieurs reprises sans réinitialiser le générateur, la séquence des nombres générés sera toujours la même lors de chaque exécution du programme. Pour obtenir une séquence de nombres différente à chaque exécution, vous devez appeler la fonction srand (généralement avec une valeur comme le temps système) pour réinitialiser le générateur avant d'utiliser rand. Exemple :
- Limitations dans les systèmes modernes : Bien que rand soit largement utilisée, elle présente des limitations sur certains systèmes modernes. Par exemple, rand peut ne pas être suffisamment performant ou sécurisé pour des applications nécessitant des générateurs de nombres plus sophistiqués. Pour ces cas, il est recommandé d'utiliser les générateurs modernes fournis par la bibliothèque <random> de C++11, offrant des algorithmes plus avancés, comme les générateurs Mersenne Twister, et une meilleure gestion des distributions.
- Absence de contrôle sur la qualité de l'aléa : La fonction rand est basée sur un générateur de nombres pseudo-aléatoires déterministe, ce qui signifie que les nombres générés peuvent être prédits si l'état interne du générateur est connu. Cela peut être un problème dans les applications de sécurité, comme dans la cryptographie ou pour des simulations scientifiques nécessitant une vraie "randomness". Dans de tels cas, il est recommandé d'utiliser des générateurs cryptographiquement sûrs ou de se tourner vers les mécanismes plus robustes de la bibliothèque <random>.
- Portabilité et compatibilité : rand est une fonction très ancienne et est supportée sur la plupart des compilateurs et plateformes. Cependant, elle peut ne pas être suffisamment robuste ou rapide dans des contextes où les performances sont critiques. Dans le C++ moderne, il est de plus en plus recommandé de se tourner vers des alternatives comme les générateurs de nombres dans la bibliothèque <random>, offrant des contrôles plus fins sur les distributions, la qualité des nombres et les algorithmes sous-jacents.
Cela permet de générer un nombre aléatoire dans un intervalle entre min et max, où min est la valeur minimale et max la valeur maximale du sous-ensemble désiré.
Exemple
Voici un exemple permettant d'afficher des nombres aléatoires :

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.