DRAND48(3)

NOM
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - Générateurs de nombres pseudo-aléatoires uniformément distribués

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 (voir feature_test_macros(7)) :

Pour toutes les fonctions décrites ci-dessus : _SVID_SOURCE || _XOPEN_SOURCE

DESCRIPTION
Ces fonctions engendrent des nombres pseudo-alé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 réelles en virgule flottante uniformément distribuées dans l'intervalle [0.0, 1.0].

Les fonctions lrand48() et nrand48() renvoient des entiers longs positifs ou nuls, 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. Une d'entre elles devrait être appelée avant d'utiliser drand48(), lrand48() ou mrand48(). Les fonctions erand48(), nrand48() et jrand48() ne nécessitent pas de fonction d'initialisation préliminaire.

Toutes ces fonctions engendrent une séquence d'entiers Xi, sur 48 bits, en utilisant 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 48 bits est respectée. Tant que lcong48() n'est pas appelée, 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 séquence, puis le nombre de bits approprié à la valeur de retour est copié en partant des bits de poids forts, enfin cette dernière valeur est renvoyée.

Les fonctions drand48(), lrand48() et mrand48() mémorisent le dernier Xi 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 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 initialisés avec la valeur arbitraire 0x330E.

La fonction d'initialisation seed48() place les éléments du tableau seed16v dans les 48 bits de Xi. La valeur précédente de Xi est copiée dans un tampon interne sur lequel un pointeur est renvoyé par seed48().

La fonction d'initialisation lcong48() permet à l'utilisateur de fournir les valeurs initiales de Xi, a et c. Les éléments param[0-2] du tableau fourni en argument représentent les 48 bits de Xi, param[3-5] correspondent à a, et param[6] correspond à c. Après un appel à lcong48(), un appel ultérieur à srand48() ou à seed48() rétablira les valeurs normales de a et c.

CONFORMITÉ
SVr4, POSIX.1-2001.

NOTES
Ces fonctions sont déclarées obsolètes par SVID 3, qui indique que rand(3) devrait être utilisé à la place.

VOIR AUSSI
rand(3), random(3)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 23 octobre 1996 et révisée le 17 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 drand48 ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.