Cuidado: esse post contém matemática, mas nada de muito difícil.
Essa tirinha, do Vida de Programador, fala em multiplicar dois números aleatórios para obter um número mais aleatório. Parece um tanto óbvio que isso é uma boa ideia, não?
Acontece que isso não funciona da forma esperada, e pode em alguns casos até diminuir a aleatoriedade dos números.
Não sei estatística o suficiente para provar de forma formal (e pelo que eu pesquisei isso vai inclusive cair em algumas contas meio tensas - o Mathematica inclusive não dá uma forma fechada para esse produto), mas de forma informal pode ser feito utilizando Python + SciPy, ou qualquer outra linguagem de programação.
Primeiro, geram-se 2 vetores seguindo a distribuição uniforme (a mais usada pelo 'random' das linguagens de programação). Após, multiplicam-se ambos, e o resultado não tem nada uniforme - aliás, parece mais exponencial, não? A mesma coisa com a soma. Vamos aos gráficos (n = 10000):
Pior ainda é multiplicar muitos números aleatórios, o que gera uma tendência extrema. Esse exemplo com 6 números aleatórios (n = 500000) demonstra:
Então, tem-se que multiplicar números aleatórios modifica a distribuição deles. Pode ser que isso seja desejável ou não vá afetar nosso problema, pode ser que não: que eles adicionem um viés, por exemplo num jogo, numa simulação, ou na seleção de propagandas a serem colocadas em um site.
Números "mais aleatórios"? Só com geradores de números aleatórios por hardware, por exemplo este, ou usando dispositivos como o /dev/random. Mas não a solução do nosso querido POGramador.
O código Python? Tem aqui.

0 comentários:
Postar um comentário
Posto que os comentários são lidos infrequentemente, este espaço não é o lugar para:
- Tirar dúvidas.
- Sugerir correções ou adições ao conteúdo.
- Fazer spam.
Para os dois primeiros itens, favor entrar em contato com o autor.
Comentários em posts anteriores a 30 dias serão recusados a menos que extremamente relevantes.