RANDOM(3)

NOME
random, srandom, initstate, setstate - random number generator

SINOPSE
#include <stdlib.h>

long int random(void);

void srandom(unsigned int seed);

char *initstate(unsigned int seed, char *state, size_t n);

char *setstate(char *state);

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

random(), srandom(), initstate(), setstate():
    _XOPEN_SOURCE >= 500
        || /* Desde o glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc versões <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

DESCRIÇÃO
A função random() usa um gerador de números aleatórios não-linear de retorno aditivo utilizando uma tabela padrão de tamanho 31 inteiros longos para devolver sucessivos números pseudo-aleatórios na faixa de 0 até 2^31 - 1. O período deste gerador de números aleatórios é muito grande, 16 * ((2^31) - 1).

A função srandom() ajusta o seu argumento como sendo a semente para uma nova seqüência de inteiros pseudo-aleatórios a serem devolvidos por random(). Estas seqüências são reproduzidas chamando srandom() com o mesmo valor para a semente. Se nenhuma semente é informada, a função random() assume automaticamente o valor 1 como semente.

The initstate() function allows a state array state to be initialized for use by random(). The size of the state array n is used by initstate() to decide how sophisticated a random number generator it should use—the larger the state array, the better the random numbers will be. Current "optimal" values for the size of the state array n are 8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to the nearest known amount. Using less than 8 bytes results in an error. seed is the seed for the initialization, which specifies a starting point for the random number sequence, and provides for restarting at the same point.

A função setstate() altera o vetor state utilizado pela função random(). O vetor state é utilizado para gerar números aleatórios até a próxima chamada a initstate() ou setstate(). state primeiro deve ter sido inicializado utilizando initstate() ou ser o resultado de um chamada anterior de setstate().

VALOR DE RETORNO
The random() function returns a value between 0 and (2^31) - 1. The srandom() function returns no value.

The initstate() function returns a pointer to the previous state array. On error, errno is set to indicate the cause.

On success, setstate() returns a pointer to the previous state array. On error, it returns NULL, with errno set to indicate the cause of the error.

ERROS

EINVAL
    The state argument given to setstate() was NULL.

EINVAL
    Um vetor state menor que 8 bytes foi especificado para initstate().

ATRIBUTOS
Para uma explicação dos termos usados nesta seção, consulte attributes(7).
Interface | Atributo | Valor
random(), srandom(), initstate(), setstate() | Thread safety | MT-Safe

DE ACORDO COM
POSIX.1-2001, POSIX.1-2008, 4.3BSD.

NOTAS
The random() function should not be used in multithreaded programs where reproducible behavior is required. Use random_r(3) for that purpose.

Random-number generation is a complex topic. Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 2007, 3rd ed.) provides an excellent discussion of practical random-number generation issues in Chapter 7 (Random Numbers).

For a more theoretical discussion which also covers many practical issues in depth, see Chapter 3 (Random Numbers) in Donald E. Knuth's The Art of Computer Programming, volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981.

BUGS
According to POSIX, initstate() should return NULL on error. In the glibc implementation, errno is (as specified) set on error, but the function does not return NULL.

VEJA TAMBÉM
getrandom(2), drand48(3), rand(3), random_r(3), srand(3)

COLOFÃO
Esta página faz parte da versão 5.08 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por Marcelo Pereira da Silva <marcelo@pereira.com> e André Luiz Fassone <lonely_wolf@ig.com.br> Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 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 <debian-l10n-portuguese@lists.debian.org>.