Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
rand, rand_r, srand - Generateur de nombres pseudo-aleatoires
SYNOPSIS
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);
Exigences de macros de test de fonctionnalites pour la glibc (consultez
feature_test_macros(7)) :
rand_r() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
DESCRIPTION
La fonction rand() renvoie un entier pseudo-aleatoire entre 0 et
RAND_MAX, bornes incluses (c'est-a-dire dans l'intervalle
[0, RAND_MAX]).
La fonction srand() utilise son argument comme << graine >> pour la
generation d'une nouvelle sequence de nombres pseudo-aleatoires, qui
seront fournis par rand(). Ces sequences sont reproductibles en
appelant srand() avec la meme valeur de graine.
Si aucune graine originale n'est fournie, la fonction rand() commence
en utilisant la valeur 1.
La fonction rand() n'est ni reentrante ni sure en contexte multithread,
car elle utilise un etat interne modifie a chaque appel. Il peut s'agir
simplement de la valeur de graine aleatoire pour l'appel suivant, ou il
peut s'agir de quelque chose de plus complique. Afin d'obtenir un
comportement reproductible dans une application multithread, cet etat
doit etre stocke dans une variable fournie explicitement ; cela peut
etre fait en utilisant la fonction reentrante rand_r().
Comme rand(), rand_r() renvoie un entier pseudo-aleatoire dans
l'intervalle [0, RAND_MAX]. L'argument seedp est un pointeur vers un
unsigned int qui est utilise pour stocker l'etat entre des appels
successifs. Si la fonction rand_r() est appelee avec la meme valeur
initiale pour l'entier pointe par seedp, et que cette valeur n'est pas
modifiee entre les appels, alors la meme sequence pseudo-aleatoire sera
generee.
La valeur pointee par l'argument seedp de rand_r() ne fournit qu'une
donnee tres petite pour stocker la valeur d'etat, cette fonction sera
donc un generateur pseudo-aleatoire faible. Essayez donc drand48_r(3) a
sa place.
VALEUR RENVOY'EE
Les fonctions rand() et rand_r() renvoient un nombre entier entre 0 et
RAND_MAX, bornes incluses. La fonction srand() ne renvoie aucune
valeur.
CONFORMIT'E
Les fonctions rand() et srand() sont conformes a SVr4, BSD 4.3, C89,
C99, POSIX.1-2001. La fonction rand_r() vient de POSIX.1-2001.
POSIX.1-2008 marque rand_r() comme etant obsolete.
NOTES
Les versions de rand() et srand() de la bibliotheque C de Linux
utilisent le meme generateur de nombres aleatoires que random(3) et
srandom(3), ainsi les bits de poids faibles sont tout aussi
imprevisibles que les bits de poids forts. Ceci n'est pas le cas avec
les anciennes implementations de rand() ou d'actuelles implementations
sur des systemes differents, ou les bits de poids faibles n'etaient pas
<< aussi aleatoires >> que ceux de poids forts. N'utilisez pas cette
fonction dans des applications concues pour etre portables et lorsqu'un
bon caractere aleatoire est necessaire. (Utilisez plutot random(3))
EXEMPLE
POSIX.1-2001 fournit l'exemple suivant d'une implementation de rand()
et srand(), potentiellement utile lorsqu'on a besoin de la meme
sequence sur deux machines differentes.
static unsigned long suivant = 1;
/* RAND_MAX suppose etre egal a 32767 */
int mon_rand(void) {
suivant = suivant * 1103515245 + 12345;
return((unsigned)(suivant/65536) % 32768);
}
void mon_srand(unsigned graine) {
suivant = graine;
}
Le programme suivant peut etre utilise pour afficher la sequence
pseudo-aleatoire produite par rand() avec une graine donnee.
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
int j, r, nloops;
unsigned int seed;
if (argc != 3) {
fprintf(stderr, "Usage: %s <seed> <nloops>\n", argv[0]);
exit(EXIT_FAILURE);
}
seed = atoi(argv[1]);
nloops = atoi(argv[2]);
srand(seed);
for (j = 0; j < nloops; j++) {
r = rand();
printf("%d\n", r);
}
exit(EXIT_SUCCESS);
}
VOIR AUSSI
drand48(3), random(3)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Nicolas
Francois et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
13 septembre 2010 RAND(3)