drand48(3)

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

BIBLIOTECA
Biblioteca C Padrão (libc, -lc)

SINOPSE
#include <stdlib.h>

double drand48(void);
double erand48(unsigned short xsubi[3]);

long lrand48(void);
long nrand48(unsigned short xsubi[3]);

long mrand48(void);
long jrand48(unsigned short xsubi[3]);

void srand48(long seedval);
unsigned short *seed48(unsigned short seed16v[3]);
void lcong48(unsigned short param[7]);

    Requisitos de macro de teste de recursos para o glibc (consulte feature_test_macros(7)):

Todas as funções mostradas acima:
    _XOPEN_SOURCE
        || /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE

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 valores de ponto flutuante de dupla precisão n'ao negativos distribuidos uniformemente entre [0.0, 1.0).

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

As funções mrand48() e jrand48() retornam inteiros longos com sinal distribuidos uniformemente entre [-2^31, 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 sequência 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.

ATRIBUTOS
Para uma explicação dos termos usados nesta seção, consulte attributes(7).
Interface | Atributo | Valor
drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() | Thread safety | Inseguro para MT race:drand48

As funções acima registram informações de estado global para o gerador de números aleatórios, portanto, não são seguras para múltiplas threads.

PADRÕES
POSIX.1-2008.

HISTÓRICO
POSIX.1-2001, SVr4.

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

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por Marcelo D. Beckmann <marcelobeckmann@yahoo.com>, André Luiz Fassone <lonely_wolf@ig.com.br> e Rafael Fontenelle <rafaelff@gnome.org>.

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).