NOMBRE¶
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 -
generan números seudo-aleatorios distribuidos uniformemente
SINOPSIS¶
#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]);
DESCRIPCIÓN¶
Estas funciones generan números seudo-aleatorios usando el algoritmo
congruente lineal y artimética de enteros de 48 bits.
Las funciones
drand48() y
erand48() devuelven valores en coma
flotante de doble precisión no negativos uniformemente distribuidos entre
[0.0, 1.0).
Las funciones
lrand48() y
nrand48() devuelven enteros largos no
negativos distribuidos uniformemente entre 0 y 2^31.
Las funciones
mrand48() y
jrand48() devuelven enteros largos con
signo distribuidos uniformemente entre -2^31 y 2^31.
Las funciones
srand48(),
seed48() y
lcong48() son funciones
de inicialización, una de las cuales debe ser llamada antes de usar
drand48(),
lrand48() o
mrand48(). Las funciones
erand48(),
nrand48() y
jrand48() no requieren que una
función de inicialización sea llamada primero.
Todas las funciones trabajan generando una secuencia de enteros de 48 bits,
Xi, de acuerdo a la fórmula de congruencia lineal:
Xn+1 = (aXn + c) mod m, donde n >= 0
El parámetro
m = 2^48, de aquí que la aritmética sea de 48
bits. A menos que se llame a
lcong48(),
a y
c son:
El valor devuelto por cualquiera de las funciones
drand48(),
erand48(),
lrand48(),
nrand48(),
mrand48() o
jrand48() es calculado primero al generar el próximo
Xi de
48 bits en la secuencia. Entonces se copia el número apropiado de bits,
de acuerdo al tipo de dato a ser devuelto, desde los bits de mayor orden de
Xi, y se transforman en el valor devuelto.
Las funciones
drand48(),
lrand48() y
mrand48() guardan el
último
Xi de 48 bits generado, en un búfr interno. Las
funciones
erand48(),
nrand48() y
jrand48() requieren que
el programa que las llame proporcione almacenamiento para los sucesivos
valores
Xi en el argumento vector
xsubi. Las funciones se
inicializan al colocar el valor inicial de
Xi en la cadena antes de
llamar a la función la primera vez.
La función inicializadora
srand48() asigna los 32 bits de mayor
orden de
Xi al argumento
seedval. Los 16 bits de orden bajo se
rellenan con un valor arbitrario 0x330E.
La función inicializadora
seed48() asigna el valor de
Xi al
valor de 48 bits especificado en el argumento vector
seed16v. Los
valores anteriores de
Xi se copian en un búfer interno y
seed48() devuelve un puntero a este búfer interno.
La función inicializadora
lcong48() permite al usuario especificar
los valores iniciales para
Xi,
a y
c. En los elementos
del argumento vector
param[0-2] se especifica
Xi, en
param[3-5] se especifica
a, y en
param[6] se especifica
c. Después de llamar a
lcong48(), una llamada a
srand48() o
seed48() puede restaurar los valores estándares
de
a y
c.
SVID 3
OBSERVACIONES¶
Estas funciones están declaradas como obsoletas por SVID 3, que dice que en
su lugar debe emplearse la función
rand(3).
VÉASE TAMBIÉN¶
rand(3),
random(3)