DRAND48(3)

NOM
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - Generateurs de nombres pseudo-aleatoires uniformement distribues.

SYNOPSIS
#include <stdlib.h>

double drand48 (void);

double erand48 (unsigned short int xsubi[3]);

long int lrand48 (void);

long int nrand48 (unsigned short int xsubi[3]);

long int mrand48 (void);

long int jrand48 (unsigned short int xsubi[3]);

void srand48 (long int seedval);

unsigned short int * seed48 (unsigned short int seed16v[3]);

void lcong48 (unsigned short int param[7]);

DESCRIPTION
Ces fonctions generent des nombres pseudo-aleatoires en utilisant un algorithme de congruence lineaire, et une arithmetique entiere sur 48 bits.

les fonctions drand48() et erand48() renvoient des valeurs reelles en virgule flottante uniformement distribuees dans l'intervalle [0.0, 1.0].

Les fonctions lrand48() et nrand48() renvoient des entiers longs positifs ou nuls, uniformement distribues entre 0 et 2^31.

Les fonctions mrand48() et jrand48() renvoient des entiers longs signes uniformement distribues entre -2^31 et 2^31.

Les fonctions srand48(), seed48() et lcong48() sont des fonctions d'initialisation. Une d'entre elles devrait etre appelee avant d'utiliser drand48(), lrand48() ou mrand49(). Les fonctions erand48(), nrand48() et jrand48() ne necessitent pas de fonction d'initialisation preliminaire.

Toutes ces fonctions engendrent une sequence d'entiers Xi, sur 48 bits, en utilisant la formule de congruence lineaire :

    Xn+1 = (aXn + c) mod m, avec n >= 0

Le parametre m vaut 2^48, ainsi l'arithmetique entiere 48 bits est respectee. Tant que lcong48() n'est pas appele, a et c valent :

    a = 0x5DEECE66D
    c = 0xB

Les fonctions drand48(), erand48(), lrand48(), nrand48(), mrand48() et jrand48() commencent par calculer le Xi suivant dans la sequence, puis le nombre de bits approprie a la valeur de retour est copie en partant des bits de poids forts, enfin cette derniere valeur est renvoyee.

Les fonctions drand48(), lrand48() et mrand48() memorisent le dernier Xi genere dans un buffer interne. Les fonctions erand48(), nrand48() et jrand48() necesssitent que le programme appelant fournisse un emplacement de stockage pour les valeurs successives de Xi, Cet emplacement est le tableau correspondant a l'argument xsubi. Ces fonctions sont initialisees en placant une valeur pour Xi dans le tableau avant le premier appel.

La fonction d'initialisation srand48() place l'argument seedval dans les 32 bits de poids fort de Xi. les 16 bits de poids faibles sont initialises avec la valeur arbitraire 0x330E.

La fonction d'initialisation seed48() place les elements du tableau seed16v dans les 48 bits de Xi. La valeur precedente de Xi est copiee dans un buffer interne sur lequel un pointeur est renvoye par seed48().

La fonction d'initialisation lcong48() permet a l'utilisateur de fournir les valeurs initiales de Xi, a et c. Les elements param[0-2] du tableau fourni en argument representent les 48 bits de Xi, param[3-5] correspondent a a, et param[6] correspond a c. Apres un appel a lcong48(), un appel ulterieur a srand48() ou a seed48() restaurera les valeurs normales de a et c.

CONFORME A
SVID 3

NOTES
Ces fonctions sont declarees obsoletes par SVID 3, qui indique que rand(3) devrait etre utilise a la place.

VOIR AUSSI
rand(3), random(3)