1. NOM

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - Générer de nombres pseudoaléatoires uniformément distribués

2. SYNOPSIS

 
Sélectionnez
#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 :

 
Sélectionnez
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 :

 
Sélectionnez
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

rand(3), random(3)

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> ».