Existem duas maneiras de os computadores gerarem números aleatórios:
- Você pode criar algum tipo de dispositivo que monitore um evento aleatório natural e envie seus resultados para o computador. Por exemplo, você pode colocar um pedaço de material radioativo em frente a um contador Geiger e conectar o contador Geiger a um computador. Um vez que a radioatividade decaia em aleatoriedade, o contador Geiger irá criar números aleatórios administráveis. Este acesso é realmente raro, pois muitas pessoas não têm contadores Geiger conectados as suas máquinas.
- Você pode criar uma fórmula que gere um número pseudo-aleatório. Quando projeta a fórmula, a idéia é produzir uma série de números, que irão parecer aleatórios para qualquer um que não saiba o que é a fórmula. As características de uma boa fórmula incluem:
- não repetição: a seqüência não pode estar em ciclo e nem se repetir;
- boa distribuição numérica: se a fórmula está gerando números aleatórios entre 0 e 9, o número de zeros, uns, dois, etc. que ela gera devem ser aproximadamente iguais depois de um longo período de tempo;
- ausência de previsões: você não tem como prever qual será o próximo número, a não ser que conheça a fórmula e a origem (o valor inicial).
Aqui está um exemplo de uma fórmula simples de número aleatório do livro "A Linguagem de Programação em C", de Kernighan e Ritchie:
int rand()
{
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}
Esta fórmula supõe a existência de uma variável chamada de origem_aleatória, que é inicialmente atribuída a algum número. A variável origem_aleatória é multiplicada por 1.103.515.245 e somada a 12.345; a origem_aleatória é então substituída por este novo valor. Este é realmente um bom gerador de números pseudo-aleatórios. Ele tem uma boa distribuição e não é repetitivo. Se você usar isto para gerar números aleatórios entre 0 e 9, aqui estão os primeiros 20 valores que serão produzidos se a origem for 10:
4
4
6
0
7
4
2
3
5
0
5
6
6
4
5
6
7
6
7
4
Se você tiver isto gerando 10.000 valores entre 0 e 9, aqui está a distribuição:
0 - 1015
1 - 1024
2 - 1048
3 - 996
4 - 988
5 - 1001
6 - 996
7 - 1006
8 - 965
9 - 961
Qualquer fórmula de número pseudo-aleatório depende do valor de origem para começar a seqüência. Se você começar com a mesma origem, chegará à mesma seqüência de valores da fórmula. Então se você der a função lista() mostrada acima (de origem 10) em um computador e ver a seqüência dos números gerados, ela será idêntica. No caso do Sistema de Posicionamento Global, esta reprodutibilidade é usada como uma forma de dar a cada satélite um padrão previsível, porém diferente de valores que o GPS receptor pode rastrear.
Para criar uma seqüência aleatória e imprevisível, a origem deve ser um número realmente aleatório. Para conseguir este número realmente aleatório para a origem, muitos programas usam data e hora atuais, convertidos para um valor inteiro (por exemplo, a conversão dos segundos que se passaram desde 1 de janeiro de 1970).Visto que este é um número diferente toda vez que você começa o programa, isto cria uma boa origem.
Abaixo estão alguns links interessantes:




