Linux |
CentOS 4.8 |
|
nrand48(3) |
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 − Générateurs de nombres pseudo−aléatoires uniformément distribués. |
#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]); |
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 lineaire : 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é, 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 buffer 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 buffer 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. |
SVID 3 |
Ces fonctions sont déclarées obsolètes par SVID 3, qui indique que rand(3) devrait être utilisé à la place. |
rand(3), random(3) |
Christophe Blaess, 1997. |
nrand48(3) |