ARTIGOS
home artigos números poemas música fotografia conversas



[voltar ao índice de artigos]

O ACASO NO COMPUTADOR

Ronaldo Entler, 1997

 

O que é o acaso para um computador? Em princípio, o funcionamento dessa máquina não permite erro, não permite jogo, pois ele trabalha seguindo rigorosamente instruções que são dadas por um programa.

Mas o acaso pode ser simulado através de uma operação complexa, perfeitamente determinada - como todas as ações do computador - mas que utiliza uma lógica não podemos acompanhar.

Para simular um sorteio, o computador parte de um número qualquer chamado de semente, inserindo-o numa série de operações matemáticas. O número resultante poderá cumprir bem o papel de um número tirado ao acaso pelo simples fato de não ser previamente conhecido, isto é, de ser imprevisível.

Se o que se quer é um conjunto de números, basta instruir o computador para que tome o resultado como uma nova semente, e assim sucessivamente, quantas vezes for necessário. Chamamos esses números de aleatórios ou, no jargão computacional, randômicos.

Está claro que esses números correspondem apenas a uma representação do acaso, pois existe uma rigorosa relação de causa e efeito atuando nesse processo: um mesmo gerador de números randômicos, sempre que partir de uma mesma semente, oferecerá os mesmos resultados. Por isso, o mais correto seria dizer "pseudo-aleatório" ou "pseudo-randômico" para se referir a um número resultante dessa operação.

Para restringir a probabilidade de repetição de um resultado, basta tomar uma semente diferente a cada vez que o cálculo é inicializado. Uma forma eficiente de fazer isso é solicitar ao computador que adote como semente números variáveis extraídos do sistema, como hora, minuto e segundo.

Temos vários exemplos de geradores de números aleatórios. O primeiro deles foi desenvolvido por John von Neumann e N. Metropolis, em 1946, constituindo-se das seguintes etapas:

1) escolhe-se uma semente de quatro algarismos (Ex.: 1234)
2) calcula-se o quadrado desse número (12342 = 1522756)
3) acrescenta-se, à esquerda do resultado, a quantidade de zeros necessária para formar um número de oito algarismos ( => 01522756)
4) elimina-se os dois dígitos iniciais e os dois finais ( => 5227)

Operações desse tipo são realizadas pelo computador através de uma sequência de instruções que chamamos de algoritimo. Trazemos a seguir o exemplo simplificado passo-a-passo de um algoritmo para geração de números pseudo-randômicos (clique em executar para realizar a tarefa especificada):

 

Extrair a hora do sistema e transformar em valor numérico (semente):
=>

Isolar os dois últimos algarismos da semente e somar 13:
+ 13 =

Dividir a semente pelo resultado da operação anterior, e tomar a parte inteira:
÷ =

Calcular o quadrado do resultado anterior:
x =

Criar dois números separando os três últimos algarismos daqueles restantes:
=> e

Desses dois números, subtrair o menor do maior, para obter o resultado:
- =

Resultado =

 

Escolhendo o intervalo dos números sorteados

Na prática, o algoritmo randômico utilizado hoje pelos computadores é mais complexo. Mas aqui, o que importa é entendermos que o computador é capaz de simular um sorteio através de um cálculo complexo que o usuário não pode acompanhar. Para facilitar o uso desses números numa programação qualquer, o algorítimo pode ainda padronizar os resultados, chegando sempre a um número entre 0 e 1. Isso não é difícil: na operação que exeplificamos acima, bastaria dividir o resultado por 10 ou 100 ou 1000..., tomando uma quantidade de zeros igual à quantidade de algarismos do número final. Por exemplo, se o resultado é 4582, dividimos esse número por 10000 (quatro algarismos, 1 seguido de quatro zeros), e obtemos, 0,4582. Em seguida, consideramos apenas uma casa depois da vírgula, chegando a 0,4.

Depois disso, definimos o intervalo desejado. Suponhamos que eu queira simular um sorteio que pode nos dar como resultado números inteiros entre 0 e 4. Para isso, o computador deve fazer corresponder a cada um dos números esperados (0, 1, 2, 3 ou 4) um intervalo igual entre os números que resultam da operação, entre 0 e 1. Suponhamos que o computador, entre 0 e 1, só trabalhe com uma casa depois da vírgula. Assim, teríamos a seguinte correspondência:

0,0 e 0,1 = 0
0,2 e 0,3 = 1
0,4 e 0,5 = 2
0,6 e 0,7 = 3
0,8 e 0,9 = 4

Mas há uma forma matematicamente mais simples de efetuar essa correspondência, que é multiplicar o número entre 0 e 1 pela quantidade de números possíveis no sorteio que é simulado e, em seguida, considerar apenas a parte inteira do resultado (eliminando o que vem depois da vírgula, após a multiplicação):

0,0 x 5 = 0,0 -> 0
0,1 x 5 = 0,5 -> 0
0,2 x 5 = 1,0 -> 1
0,3 x 5 = 1,5 -> 1
0,4 x 5 = 2,0 -> 2
0,5 x 5 = 2,5 -> 2
0,6 x 5 = 3,0 -> 3
0,7 x 5 = 3,5 -> 3
0,8 x 5 = 4,0 -> 4
0,9 x 5 = 4,5 -> 4

Se os números esperados fossem entre 1 e 5, em vez de 0 e 4, teríamos a mesma quantidade (5 números) mas deveríamos somar 1 ao resultado. Dessa forma, podemos instruir o computador a nos fornecer qualquer quantidade de números, dentro de qualquer intervalo, mantendo a imprevisibilidade dos resultados.

 

[voltar ao índice de artigos]

Ronaldo Entler sobre o site