1. NOM▲
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - Générer de nombres pseudoaléatoires uniformément distribués
2. SYNOPSIS ▲
#include <stdlib.h>
double
drand48
(
void
);
double
erand48
(
unsigned
short
xsubi[3
]);
long
int
lrand48
(
void
);
long
int
nrand48
(
unsigned
short
xsubi[3
]);
long
int
mrand48
(
void
);
long
int
jrand48
(
unsigned
short
xsubi[3
]);
void
srand48
(
long
int
seedval);
unsigned
short
*
seed48
(
unsigned
short
seed16v[3
]);
void
lcong48
(
unsigned
short
param[7
]);
Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :
Pour toutes les fonctions ci-dessus : _SVID_SOURCE || _XOPEN_SOURCE
3. DESCRIPTION ▲
Ces fonctions génèrent des nombres pseudoaléatoires en utilisant un algorithme de congruence linéaire, et une arithmétique entière sur 48 bits.
Les fonctions drand48() et erand48() renvoient des valeurs positives en virgule flottante double précision, uniformément distribuées dans l'intervalle [0.0, 1.0].
Les fonctions lrand48() et nrand48() renvoient des entiers longs positifs, uniformément distribués entre 0 et 2^31.
Les fonctions mrand48() et jrand48() renvoient des entiers longs signés, uniformément distribués entre -2^31 et 2^31.
Les fonctions srand48(), seed48() et lcong48() sont des fonctions d'initialisation. L'une d'entre elles doit être appelée avant d'utiliser les fonctions drand48(), lrand48() ou mrand48(). Les fonctions erand48(), nrand48() et jrand48() ne nécessitent pas de fonction d'initialisation.
Toutes ces fonctions engendrent une séquence d'entiers Xi, sur 48 bits, suivant la formule de congruence linéaire :
Xn+
1
=
(
aXn +
c) mod m, avec n >=
0
Le paramètre m vaut 2^48, ainsi l'arithmétique entière sur 48 bits est respectée. Tant que lcong48() n'est pas appelé, a et c valent :
a =
0x5DEECE66D
c =
0xB
Les valeurs renvoyées par les fonctions drand48(), erand48(), lrand48(), nrand48(), mrand48() ou jrand48() sont calculées en générant les Xi suivant sur 48 bits dans la séquence. Ensuite, le nombre de bits approprié au type de la valeur de retour est copié en partant des bits de poids forts de Xi, et convertit dans la valeur renvoyée.
Les fonctions drand48(), lrand48() et mrand48() mémorisent le dernier Xi sur 48 bits créé dans un tampon interne. Les fonctions erand48(), nrand48() et jrand48() nécessitent que le programme appelant fournisse un emplacement de stockage pour les valeurs successives de Xi. Cet emplacement est le tableau correspondant à l'argument xsubi. Ces fonctions sont initialisées en plaçant la valeur initiale de Xi dans le tableau avant le premier appel.
La fonction d'initialisation srand48() définit les 32 bits de poids fort de Xi avec l'argument seedval. Les 16 bits de poids faibles sont initialisés avec la valeur arbitraire 0x330E.
La fonction d'initialisation seed48() définit la valeur de Xi comme la valeur spécifiée dans le tableau seed16v. La précédente valeur de Xi est copiée dans un tampon interne et un pointeur vers ce tampon est renvoyé par seed48().
La fonction d'initialisation lcong48() permet à l'utilisateur de définir des valeurs initiales de Xi, a et c. Les éléments param[0-2] du tableau spécifient Xi, param[3-5] spécifient a et param[6] spécifie c. Après un appel à lcong48(), un appel ultérieur à srand48() ou à seed48() rétablira les valeurs normales de a et c.
4. ATTRIBUTS ▲
4.1. Multithreading (voir pthreads(7)) ▲
Les fonctions drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48() et lcong48() ne sont pas sûres dans un contexte multithread car elles enregistrent globalement l'état du générateur de nombre aléatoire.
5. CONFORMITÉ ▲
SVr4, POSIX.1-2001.
6. NOTES ▲
Ces fonctions sont déclarées obsolètes par SVID 3, qui indique que rand(3) devrait être utilisée à la place.
7. VOIR AUSSI ▲
8. COLOPHON ▲
Cette page fait partie de la publication 3.52 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.
9. TRADUCTION ▲
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <>.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».