C:
Gerando números aleatórios
Como fazer:
Em C, números aleatórios podem ser gerados usando a função rand()
, que faz parte da biblioteca padrão do C <stdlib.h>
. Por padrão, rand()
produz números pseudoaleatórios no intervalo de 0 a RAND_MAX
(uma constante definida em <stdlib.h>
). Para ter mais controle sobre o intervalo, os programadores podem manipular a saída de rand()
.
Aqui está um exemplo simples de geração de um número aleatório entre 0 e 99:
#include <stdio.h>
#include <stdlib.h> // Para rand() e srand()
#include <time.h> // Para time()
int main() {
// Sementeia o gerador de números aleatórios
srand((unsigned) time(NULL));
// Gera um número aleatório entre 0 e 99
int randomNumber = rand() % 100;
printf("Número Aleatório: %d\n", randomNumber);
return 0;
}
A saída do exemplo pode variar a cada vez que você executa este programa:
Número Aleatório: 42
Para gerar números aleatórios em um intervalo diferente, você pode ajustar o operador de módulo (%
) de acordo. Por exemplo, rand() % 10
gera números de 0 a 9.
É importante notar que semear o gerador de números pseudoaleatórios (srand()
) com o tempo atual (time(NULL)
) garante sequências diferentes de números aleatórios a cada execução do programa. Sem a semeadura (srand()
), rand()
produziria a mesma sequência de números todas as vezes que o programa fosse executado.
Aprofundamento
A função rand()
e seu par para semeadura srand()
fazem parte da biblioteca padrão do C há décadas. Eles são baseados em algoritmos que geram sequências de números que apenas parecem ser aleatórios—daí o termo “pseudoaleatórios”. O algoritmo subjacente em rand()
é tipicamente um gerador linear congruencial (LCG).
Embora rand()
e srand()
sejam suficientes para muitas aplicações, eles têm limitações conhecidas, especialmente no que diz respeito à qualidade da aleatoriedade e à potencial previsibilidade. Para aplicações que exigem aleatoriedade de alta qualidade, como operações criptográficas, alternativas como /dev/random
ou /dev/urandom
(em sistemas semelhantes ao Unix), ou APIs fornecidas por bibliotecas criptográficas, devem ser consideradas.
Com a introdução do C11, o padrão ISO C incluiu um novo cabeçalho, <stdatomic.h>
, oferecendo um controle mais refinado para operações concorrentes, mas não diretamente relacionado à aleatoriedade. Para verdadeira aleatoriedade em C, desenvolvedores muitas vezes recorrem a bibliotecas específicas da plataforma ou externas que oferecem algoritmos melhores ou fazem uso de fontes de entropia de hardware.
Lembre-se, enquanto rand()
serve como um meio simples e acessível para gerar números pseudoaleatórios, seus usos em aplicações modernas são limitados pela qualidade e previsibilidade de sua saída. Quando soluções mais robustas são necessárias, especialmente para aplicações conscientes da segurança, explorar além da biblioteca padrão é altamente recomendado.