rand(3) Library Functions Manual rand(3) NOM rand, rand_r, srand - Gnrateur de nombres pseudoalatoires BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int rand(void); void srand(unsigned int graine); [[deprecated]] int rand_r(unsigned int *seedp); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : rand_r(): Depuis la glibc 2.24 : _POSIX_C_SOURCE >= 199506L glibc 2.23 et antrieures _POSIX_C_SOURCE DESCRIPTION La fonction rand() renvoie un entier pseudoalatoire entre 0 et RAND_MAX, bornes incluses (c'est--dire dans l'intervalle mathmatique [0,\fBRAND_MAX]). La fonction srand() utilise son argument comme graine pour la gnration d'une nouvelle squence de nombres pseudoalatoires qui seront fournis par rand(). Ces squences sont reproductibles en appelant srand() avec la mme valeur de graine. Si aucune graine originale n'est fournie, la fonction rand() commence en utilisant la valeur 1. La fonction rand() n'est pas rentrante, car elle utilise un tat cach modifi chaque appel. Il peut s'agir simplement de la valeur de graine alatoire pour l'appel suivant ou de quelque chose de plus compliqu. Afin d'obtenir un comportement reproductible dans une application threade, cet tat doit tre explicite; cela peut tre fait en utilisant la fonction rentrante rand_r(). Comme rand(), rand_r() renvoie un entier pseudoalatoire dans l'intervalle [0, RAND_MAX]. L'argument seedp est un pointeur vers un unsigned int qui est utilis pour stocker l'tat entre des appels successifs. Si la fonction rand_r() est appele avec la mme valeur initiale pour l'entier point par seedp, et que cette valeur n'est pas modifie entre les appels, alors la mme squence pseudoalatoire sera gnre. La valeur pointe par l'argument seedp de rand_r() ne fournit qu'une donne trs petite pour stocker la valeur d'tat, cette fonction sera donc un gnrateur pseudoalatoire faible. Essayez donc drand48_r(3) sa place. VALEUR RENVOYEE Les fonctions rand() et rand_r() renvoient un nombre entier entre 0 et RAND_MAX, bornes incluses. La fonction srand() ne renvoie aucune valeur. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |rand(), rand_r(), srand() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ VERSIONS Les versions de rand() et srand() de la bibliothqueC de Linux utilisent le mme gnrateur de nombres alatoires que random(3) et srandom(3), ainsi les bits de poids faible sont tout aussi imprvisibles que les bits de poids fort. Ceci n'est pas le cas avec les anciennes implmentations de rand() ou d'actuelles implmentations sur des systmes diffrents, o les bits de poids faible n'taient pas aussi alatoires que ceux de poids fort. N'utilisez pas cette fonction dans des applications conues pour tre portables et lorsqu'un bon caractre alatoire est ncessaire. (Utilisez plutt random(3)) STANDARDS rand() srand() C11, POSIX.1-2008. rand_r() POSIX.1-2008. HISTORIQUE rand() srand() SVr4, 4.3BSD, C89, POSIX.1-2001. rand_r() POSIX.1-2001. Obsolete in POSIX.1-2008. EXEMPLES POSIX.1-2001 fournit l'exemple suivant d'une implmentation de rand() et srand() potentiellement utile lorsqu'on a besoin de la mme squence sur deux machines diffrentes. static unsigned long next = 1; /* RAND_MAX assumed to be 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned)(next/65536) % 32768); } void mysrand(unsigned int seed) { next = seed; } Le programme suivant peut tre utilis pour afficher la squence pseudoalatoire produite par rand() avec une graine donne. Quand la graine est -1, le programme utilise une graine alatoire. #include #include int main(int argc, char *argv[]) { int r; unsigned int seed, nloops; if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } seed = atoi(argv[1]); nloops = atoi(argv[2]); if (seed == -1) { seed = arc4random(); printf("seed: %u\n", seed); } srand(seed); for (unsigned int j = 0; j < nloops; j++) { r = rand(); printf("%d\n", r); } exit(EXIT_SUCCESS); } VOIR AUSSI drand48(3), random(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par #-#-#-#-# min-002-occurences.po (perkamon) #-#-#-#-#, Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Philippe MENGUAL , Jean-Pierre Giraud , #-#-#-#-# min-003-occurences.po (perkamon) #-#-#-#-#, Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Philippe MENGUAL , Jean-Pierre Giraud , #-#-#-#-# min-004-occurences.po (perkamon) #-#-#-#-#, Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Philippe MENGUAL , Jean-Pierre Giraud , #-#-#-#-# min-010-occurences.po (perkamon) #-#-#-#-#, Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Thomas Vincent , #-#-#-#-# min-020-occurences.po (perkamon) #-#-#-#-#, Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Philippe MENGUAL , Jean-Pierre Giraud , #-#-#-#-# min-100-occurences.po (perkamon) #-#-#-#-#, Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Philippe MENGUAL , Jean-Pierre Giraud et # Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 rand(3)