Hoje em dia o que é usado para a aleatorização de números é o
método congruente linear, na maioria das vezes uma variância, mas sempre se baseando no método principal. Foi desenvolvido em 1951 pelo professor
Derrick Henry Lehmer, ele acreditava que o restos de sucessivas potências de um número gerariam bons números aleatórios.
Traduzindo para linguagem de nerds.
Explicando a linguagem dos nerds:
- Escolha um número 'a' e o eleve na 'n' potência
- Divida por 'm'
- O que sobrar disso será seu número aleatório(x)
Como se pode imaginar o "range" dos números sempre irá até 'm - 1' pelo fato do resto nunca ser maior que o dividendo. Para tentar distribuir as coisas um pouquinho mais, há uma formula construída a partir da seguinte variação do método de Lehmer.
Exemplo:
Exemplo copiado do material de Criston Pereira de Souza,
página 2, índice 29.
Para garantir eficiência de computabilidade para a fórmula adota-se a seguinte regra:
- M tem que ser uma potência de 2, desta maneira podemos gera-lo apenas deslocando bits à esquerda.
E a terceira e mais otimizada fórmula, chamada de método do congruente linear multiplicativo:
Além de herdar as características das anteriores não usa-se adições, o que diminui mas uma parcela de tempo de computação.
Segurança: como referenciado no início do artigo, um dos pontos mais importantes pela natureza das implementações é a segurança, e não é diferente no método do Congruente Linear, para garantir a segurança temos que tomar tais medidas:
- Não deve haver arredondamentos em momento algum
- Tratar possíveis overflows
- Não permitir que a multiplicação a * x ultrapasse o número de bits da arquitetura implementada
Fontes: Introdução à Modelagem e Simulação de Sistemas com Aplicações Arena. Freitas Filho, Paulo José, cap 3, segunda edição.
Considerações finais
Nas páginas anteriores pudemos ver um pouco de como funcionam os algoritmos para gerar os números através do método pseudo random, em um futuro próximo irei escrever como o método True Random gera um número a partir de fenômenos que não são digitais, mas sim físicos.
Fique a vontade para acrescentar qualquer coisa interessante ou correção a partir dos comentários e/ou me contatar no email: pablo_margreff@hotmail.com (HOTMAIL, isso mesmo).
Abraço.