Números aleatórios com a GNU Scientific Library (GSL)

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.

  1. Inclusão da biblioteca. No cabeçalho do programa use
     #include <gsl/gsl_rng.h> 
  2. 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;
  3. Inicie a semente do gerador
     gsl_rng_set(r,semente); 
    onde semeste é uma variável do tipo
     unsigned long int 
  4. 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.
  5. Para finalizar. A etiqueta da boa programação manda liberar a memória criada no ponteiro r, basta usar
    gsl_rng_free(r);
  6. Compilar. Supondo que já tem a gsl instalada use apenas as flags -lgsl -lgslcblas -lm no seu compilador favorito.