DRAND48(3)

NOME
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - gera números pseudo-randômicos distribuidos uniformemente

SINOPSE
#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(unsignedshortint seed16v [3]);

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

DESCRIÇÃO
Essas funções geram números pseudo-randômicos usando o algoritmo de congruência linear e aritmética inteira de 48-bit.

As funções drand48() e erand48() retornam inteiros longos não-negativos distribuidos uniformemente entre [0.0, 1.0).

As funções lrand48() e nrand48() retornam inteiros longos não-negativos distribuidos uniformemente entre 0 e 2^31.

As funções mrand48() e jrand48() retornam inteiros longos com sinal distribuidos uniformemente entre -2^31 and 2^31.

As funções srand48(), seed48() e lcong48() são funções de inicialização, as quais deve ser chamadas antes do uso de drand48(), lrand48() ou mrand49(). As funções erand48(), nrand48() e jrand48() não requerem a chamada da função de inicialização primeiro.

Todas as funções trabalham gerando uma sequencia de inteiros 48-bit, Xi, de acordo com a formula de congruência linear:

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

O parâmetro m = 2^48, portanto uma aritmética de inteiro 48-bit é realizada. A não ser que lcong48() seja chamada, a e c são obtidos por:

    a = 0x5DEECE66D
    c = 0xB

O valor retornado por qualquer uma das funções drand48(), erand48(), lrand48(), nrand48(), mrand48() ou jrand48() é computado para primeira geração do próximo 48-bit Xi na sequência. Então, o número apropriado de bits, de acordo com o tipo de item de dado a ser retornado, é copiado dos bits de mais alta ordem de Xi e transformado no valor retornado.

As funções drand48(), lrand48() e mrand48() armazenam o último 48-bit Xi gerado em um buffer interno. As funções erand48(), nrand48() e jrand48() requerem que o programa chamador providencie armazenamento para os valores sucessivos de Xi no argumento vetor xsubi. As funções são inicializadas pela colocação do valor inicial de Xi no vetor antes da primeira chamada as funções.

A função de inicialização srand48() ajusta os 32-bits de mais alta ordem de Xi para o argumento seedval. Os 16-bits de mais baixa ordem são ajustados arbitrariamente para o valor 0x330E.

A função de inicialização seed48() seta o valor de Xi para o valor 48-bit especificado no argumento vetor seed16v. O valor anterior de Xi é copiado em um buffer interno e um ponteiro para esse buffer é retornado por seed48().

A função de inicialização lcong48() permite ao usuário especificar valores iniciais para Xi, a e c. O elemento param[0-2] do argumento vetor especifica Xi, param[3-5] especifica a, e param[6] especifica c. Após a chamada de lcong48(), uma chamada subsequente a srand48() ou seed48() irá restaurar os valores padrão de a e c.

CONFORMIDADE
SVID 3

NOTAS
Essas funções são declaradas obsoletas por SVID 3, o qual indica que rand(3) deve ser usado em seu lugar.

VEJA TAMBÉM
rand(3), random(3)

TRADUZIDO POR LDP-BR em 21/08/2000.
Marcelo D. Beckmann <marcelobeckmann@yahoo.com> (tradução) Espaço para o Revisor <nome@dominio.com.br> (revisão)