====== Números aleatórios com a GNU Scientific Library (GSL) ======
A [[http://www.gnu.org/software/gsl/|GSL]] é a melhor biblioteca de programação científica na linguagem C. E uma das muitas utilidades dela são seus geradores de números pseudo-aleatórios. Que usei recentemente e consiste em alguns passos muito fáceis, vide documentação em [[http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Generation.html]]. Que eu resumo aqui.
- **Inclusão da biblioteca**. No cabeçalho do programa use #include
- **Alocação do gerador.** Declare um ponteiro com o tipo dessa biblioteca: gsl_rng *r;
e crie o espaço na memória r = gsl_rng_alloc(gsl_rng_tipo);
onde //tipo// poderá ser substituído pelos nomes dos geradores disponíveis: taus, gfsr4, mt19937, ranlxs0, ranlxs1, mrg, ranlux, ranlxd1, ranlxs2, cmrg, ranlux389, ranlxd2;
- **Inicie a semente do gerador** gsl_rng_set(r,semente);
onde semeste é uma variável do tipo unsigned long int
- **Pronto.** Agora poderá usar por exemplo gsl_rng_uniform_int(r,n);
para gerar um número aleatório do tipo //unsigned long int// no intervalo fechado [0,n-1]. Ou se preferir gsl_rng_uniform(r);
para números no intervalo [0,1). A função mais simples é a gsl_rng_get(r);
que retorna um número aleatório, sempre do tipo inteiro longo sem sinal, entre o inteiro mínimo e máximo do tipo de gerador escolhido, e pode ser guardado para dar continuidade à mesma lista de pseudo-aleatórios do gerador utilizado.
- **Para finalizar.** A etiqueta da boa programação manda liberar a memória criada no ponteiro //r//, basta usar gsl_rng_free(r);
- **Compilar**. Supondo que já tem a gsl instalada use apenas as //flags// -lgsl -lgslcblas -lm no seu compilador favorito.
{{tag>}}
~~LINKBACK~~
~~DISCUSSION~~