Para que serve e para que não serve este gerador
Os geradores pseudoaleatórios diferem enormemente naquilo para que servem. Este é rápido, reproduzível e estatisticamente correto para uso corrente, e não é de todo uma fonte de segredos.
| Utilização | Adequado? | Porquê |
|---|---|---|
| Ensino, simulações, amostragem | Sim | Sorteios reproduzíveis são uma vantagem |
| Escolher um vencedor, dados, números de lotaria | Sim, com uma semente nova | Quem souber a semente reproduz o sorteio |
| Palavras-passe, chaves, tokens, identificadores de sessão | Não | O estado é recuperável a partir da saída; use o gerador de palavras-passe |
| Jogo regulado ou apostas | Não | Exigem hardware certificado ou geradores criptográficos |
- Ambos os extremos do intervalo estão incluídos, pelo que um intervalo de 1 a 100 contém 100 valores possíveis.
- Sem reposição, o número de extrações não pode exceder o número de valores do intervalo. A calculadora recusa em vez de repetir em silêncio.
O que é um gerador pseudoaleatório
Um gerador de números pseudoaleatórios é um algoritmo determinístico que produz uma sequência que passa os testes estatísticos de aleatoriedade. Não é aleatório no sentido físico: é uma recorrência fixa e, a partir de um valor inicial dado — a semente —, produz sempre a mesma sequência.
Este é um gerador xorshift de 32 bits, publicado por George Marsaglia no Journal of Statistical Software em 2003. Funciona aplicando repetidamente o ou-exclusivo entre um valor e cópias deslocadas de si próprio, com um trio de deslocamentos escolhido para que a sequência percorra todos os estados de 32 bits não nulos antes de se repetir.
O uso de semente é deliberado e não uma limitação. Todas as calculadoras deste site são funções puras dos seus dados de entrada, e é isso que torna os resultados reproduzíveis e verificáveis. Dá-lhe ainda algo que um gerador baseado no relógio não pode dar: cite a semente ao lado dos seus números e qualquer pessoa reproduz o seu sorteio exatamente.
Como usar o gerador de números aleatórios
- Defina o valor mínimo e o máximo. Ambos os extremos estão incluídos no intervalo.
- Escolha quantos números extrair.
- Decida se são permitidas repetições. Sem reposição nenhum valor pode sair duas vezes, pelo que não pode extrair mais números do que o intervalo contém.
- Mude a semente sempre que quiser um sorteio diferente. A mesma semente devolve sempre os mesmos números.
Como se produzem os números
A recorrência xorshift transforma três vezes um estado de 32 bits por cada extração e depois divide por 2^32 para dar um valor no intervalo de zero até um, exclusive. Multiplicar pelo tamanho do intervalo e tomar a parte inteira leva-o a um inteiro.
O sorteio sem reposição usa um baralhamento parcial de Fisher-Yates sobre o intervalo. Cada extração coloca no lugar um elemento restante, o que seleciona um subconjunto uniformemente aleatório numa só passagem e não pode encravar como acontece a uma abordagem de extrair e repetir à medida que o conjunto se esvazia.
Erros comuns
- Usar um gerador pseudoaleatório para algo secreto. A sequência fica totalmente determinada pela semente.
- Esperar números novos sem mudar a semente. A reprodutibilidade é o objetivo; a semente é o controlo.
- Assumir que o extremo superior fica excluído. Aqui ambos os extremos do intervalo estão incluídos.
- Pedir mais valores distintos do que o intervalo contém.
- Ler uma série de valores parecidos como uma falha. O agrupamento é uma propriedade normal das sequências aleatórias, e a sua ausência seria mais suspeita do que a sua presença.
Perguntas frequentes
Porque é que a mesma semente dá sempre os mesmos números?
Porque um gerador pseudoaleatório é uma recorrência determinística e a semente é o seu estado inicial. É uma virtude e não um defeito: citar a semente permite a qualquer pessoa reproduzir o seu sorteio exatamente, que é o que a investigação reproduzível e as demonstrações em aula precisam. Para sortear de outro modo, mude a semente.
É suficientemente aleatório para um sorteio de prémios?
Para um sorteio informal sim, desde que escolha uma semente que os participantes não consigam prever e a publique depois para que o resultado possa ser verificado. Para jogo regulado não: esses contextos exigem geradores de hardware certificados ou algoritmos criptograficamente seguros.
Posso usar isto para gerar uma palavra-passe?
Não. O estado interno de um gerador xorshift pode ser recuperado a partir de uma pequena amostra da sua saída, pelo que tudo o que dele derive é previsível. Use o gerador de palavras-passe deste site, que extrai da fonte aleatória criptograficamente segura do sistema operativo.
O que significa extrair sem reposição?
Significa que nenhum valor pode sair mais do que uma vez, como ao tirar bolas de lotaria. Como cada extração retira um valor do conjunto, não pode extrair mais números do que o intervalo contém: tirar seis valores distintos de um intervalo de cinco é impossível.
Os números estão distribuídos uniformemente?
Sim, até à precisão do gerador subjacente. Cada valor do intervalo é igualmente provável, e o modo sem reposição usa um baralhamento parcial de Fisher-Yates, que seleciona todos os subconjuntos de um dado tamanho com igual probabilidade.
Referências
- Marsaglia G. Xorshift RNGs. Journal of Statistical Software 2003; 8(14): 1-6. doi:10.18637/jss.v008.i14.
- Knuth DE. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd edition. Addison-Wesley, 1997 — random number generation and statistical testing.
- Fisher RA, Yates F. Statistical Tables for Biological, Agricultural and Medical Research. Oliver and Boyd, 1938 — the shuffle used for sampling without replacement.
- L'Ecuyer P, Simard R. TestU01: A C library for empirical testing of random number generators. ACM Transactions on Mathematical Software 2007; 33(4): 22.