Como seria programar um computador para fazer algo aleatório? É como fazer um cálculo na calculadora, que devolve números aleatoriamente?
Como funciona o método Math.random? Como é possível programar uma máquina para fazer algo aleatório?
O Math.random()
não é aleatório de verdade. Ele simula uma distribuição uniforme no intervalo [0.0, 1.0[
. Em outras palavras, ele simula o seguinte comportamento: se você chamar Math.random()
infinitas vezes, todos os double
s entre 0.0
(inclusivo) e 1.0
(não inclusivo) tem exatamente a mesma chance de acontecer.
É apenas uma equação. Ela começa com um número qualquer, geralmente chamado de seed
, e vai iterando sobre esse número toda vez que um novo número aleatório é pedido.
Algo bem comum para se tentar um seed “aleatório” é ler o valor de uma porta analógica qualquer do processador, que não esteja conectada a nada. A própria oscilação da eletricidade faz com que o valor pareça aleatório e imprevisível.
Na maioria das vezes esse comportamento, chamado de “pseudo-random” é suficiente.
Alguns argumentam que é virtualmente impossível gerar números de forma realmente aleatória, acreditando que aleatoriedade não existe de verdade. O que acontece é que a gente não conhece todas as variáveis que influenciam um sistema, e por isso parece que é aleatório.
Entendi, que legal. Saindo um pouco desse assunto de programação, antigamente, os físicos pensavam que se soubéssemos todas as posições e energia de todas as partículas do universo, poderíamos prever o futuro, e calcular o passado. Mas isso veio antes da mecânica quântica e sua natureza probabilística, onde simplesmente é impossível dizer com exatidão a energia e posição de uma partícula, porque ela assume várias realidades até ser observada