A 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 <gsl/gsl_rng.h>
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.
Use the following URL for manually sending trackbacks: http://complex.if.uff.br/lib/plugins/linkback/exe/trackback.php/orahcio:home:gsl_rng
Discussão