Pague-me um café
Voltar ao Blog
Education

Aleatório de Verdade vs Pseudoaleatório: O Que Realmente Importa

Random Select Team•2026-04-01•7 min

Você aperta um botão, aparece um número e assume que ele é aleatório. A pergunta que vale fazer é o que o produziu — porque uma das duas respostas é verificável e a outra não.

De Onde Vem a Aleatoriedade Genuína

A aleatoriedade de verdade vem de processos físicos que não são determinados pelo estado anterior:

  • Decaimento radioativo — o instante exato em que um átomo decai não pode ser previsto
  • Ruído térmico — flutuações aleatórias de tensão em um resistor
  • Ruído atmosférico — o chiado de fundo da atividade de raios
  • Medição quântica — resultados genuinamente indeterminados

Isso não são aproximações de aleatoriedade. São aleatórios, no sentido de que nenhuma quantidade de conhecimento sobre o passado determina o resultado.

O Que um Computador Faz no Lugar Disso

Um computador não consegue observar nada disso diretamente, então um gerador de hardware faz a amostragem. Os bytes brutos vêm de algo como /dev/urandom ou da fonte equivalente do sistema operacional, que por sua vez é semeada a partir de processos físicos. Esse é um gerador de números verdadeiramente aleatórios.

O caso muito mais comum é o gerador pseudoaleatório: um algoritmo determinístico que produz uma sequência que apenas parece aleatória.

next = (previous × multiplier + increment) mod modulus

A propriedade crítica não é sutil. Se você conhece o algoritmo e a semente, consegue calcular todo valor que a sequência vai produzir. Não aproximadamente — exatamente.

É por isso que Math.random(), usado por quase todo site, não serve para nada que importe. A saída é determinada pelo estado interno. Recupere esse estado a partir das saídas observadas e todo resultado futuro fica previsível.

O exemplo mais citado é que o estado completo de um gerador congruente linear pode ser recuperado a partir de algumas saídas consecutivas. O Mersenne Twister, padrão em Python, precisa de 624 saídas para ser reconstruído — e 624 é um número que você alcança em segundos.

O Xorshift e geradores rápidos parecidos têm a mesma propriedade de outra forma: qualidade estatística excelente, totalmente previsíveis se você tiver o estado.

O Meio-Termo que Realmente Importa

Esta é a parte que a maioria das explicações pula, e é a que decide a resposta na prática.

Um número aleatório gerado pela ferramenta

As plataformas web modernas não usam /dev/urandom bruto a cada chamada. Elas usam um PRNG criptograficamente seguro — um algoritmo determinístico, mas semeado a partir de entropia de hardware e projetado para que observar as saídas não permita recuperar o estado.

Vale ser preciso sobre a distinção, porque as duas coisas costumam ser confundidas:

TRNG de hardware CSPRNG PRNG comum
Baseado em entropia física Sim Sim Não
Determinístico dado o estado Não Sim Sim
A saída revela o estado Não Não Sim
Adequado para um sorteio de prêmios Sim Sim Não

Um CSPRNG é determinístico no mesmo sentido em que todo software que você usa é determinístico. O que o torna aceitável é que o estado não é recuperável a partir do que ele já emitiu.

Os navegadores expõem exatamente isso por meio de crypto.getRandomValues(). É a fonte da qual o RandomSelect sorteia.

Justiça é uma Segunda Questão

A uniformidade é fácil de errar mesmo com uma boa fonte. Um d6 é simples: seis valores igualmente prováveis. Um d7 não é, e “escolher 1 entre 40 nomes” também não.

A abordagem ingênua — escalar um número de ponto flutuante de 0 a 1 para o intervalo — enviesa a extremidade inferior. Com 40 nomes, o primeiro apareceria um pouco mais vezes que o último, porque alguns valores aleatórios caem além do fim do último bloco e são descartados de forma desigual.

A abordagem correta é a amostragem por rejeição: sorteie e, se o resultado cair no bloco final incompleto, descarte e sorteie de novo. A distribuição fica exatamente uniforme.

Isso é fácil de passar despercebido porque o viés é pequeno. Na prática, a implementação rejeita valores fora do intervalo e sorteia de novo, então cada entrada tem exatamente 1/N de chance — inclusive em um sorteio de 40 nomes, em que uma implementação de ponto flutuante escalado daria ao primeiro nome uma probabilidade um pouco maior.

A mesma técnica aparece no gerador de IDs curtos, em que o comentário no código anota a taxa de aceitação e o viés resultante de cerca de duas partes em dez milhões. Pequeno o bastante para ser irrelevante, e pequeno o bastante para que uma implementação descuidada passasse despercebida — que é exatamente o motivo de medi-lo.

O Que Isso Significa na Prática

Para escolher o almoço, nada disso importa. Qualquer gerador produz um almoço aceitável.

Para um sorteio de prêmios, uma atribuição de funcionários ou qualquer coisa que envolva reputação, a questão é se a saída poderia ter sido antecipada. Com Math.random() poderia, em princípio. Com crypto.getRandomValues() não — e essa é a diferença entre “dizemos que foi aleatório” e “o mecanismo garante que é”.

Há um ponto relacionado e frequentemente mal compreendido sobre a animação. Em uma roleta giratória, o resultado é definido antes de a roleta começar a girar; a animação se desenrola em direção a ele. Alguns leitores interpretam isso como prova de manipulação. É o contrário: como o resultado já está determinado e não pode ser influenciado pelo tempo, não há entrada para ninguém explorar. O visual é encenação sobre um valor que já está fixado.

Testando Você Mesmo

Um exercício rápido que não precisa de código: jogue um dado vinte vezes e anote os resultados. Depois procure sequências.

Você vai encontrá-las. Três seis seguidos acontecem mais ou menos uma vez a cada cinquenta jogadas. Isso não é sinal de que o dado está viciado — é a cara de um processo justo quando você examina uma amostra curta.

Depois jogue cem vezes e conte cada face. As diferenças diminuem. Ninguém está convergindo, porque nunca houve déficit a fechar: é isso que independência significa quando você olha de perto o bastante.

Onde Ler Mais

A página de imparcialidade deste site percorre a implementação real, incluindo a etapa de amostragem por rejeição. Vale a pena ler uma vez, principalmente se você está escolhendo uma ferramenta para uma decisão que será questionada.

O resumo prático é curto: uma ferramenta que usa crypto.getRandomValues() e rejeita sorteios fora do intervalo está fazendo a coisa certa, e você não precisa acreditar na palavra dela — pode raciocinar sobre o mecanismo.

RST

Random Select Team

Analista de dados experiente e teórico de jogos na Random Select. Mais de 10 anos de experiência em equidade digital, matemática de probabilidade e sistemas de decisão aleatória.

Compartilhar este artigo