Spinner.tools

A Roleta é Aleatória?

Sim. A fatia vencedora é escolhida no instante do clique, pela fonte aleatória criptográfica do navegador. Veja como isso funciona e como testar você mesmo.

A roleta é aleatória: cada giro sorteia um número novo com crypto.getRandomValues, a fonte aleatória criptográfica embutida no navegador, e só esse número decide qual fatia vence. A decisão acontece no instante do clique, antes de a roleta começar a se mover, e nada na animação, no momento do clique ou nos resultados anteriores pode mudá-la. O resto desta página mostra cada etapa e termina com um simulador para você conferir a afirmação com os próprios olhos.

O que acontece quando você clica em girar

Três coisas acontecem em ordem, e a ordem é o ponto principal. Primeiro, o navegador entrega um número aleatório e o código o usa para escolher uma fatia. Segundo, o código calcula um ângulo de parada dentro dessa fatia e soma várias voltas completas a ele. Terceiro, a roleta anima do ponto em que está até esse ângulo, desacelerando numa curva fixa até parar.

  1. 1A fatia vencedora é escolhida no instante do clique, com os números aleatórios criptográficos do navegador.
  2. 2A roleta dá várias voltas completas e desacelera numa curva fixa até essa fatia.
  3. 3O ponteiro para dentro da fatia, longe das bordas, então nunca há empate.

O giro que você assiste é, portanto, a reprodução de uma decisão já tomada. Se você pudesse pausar a animação um quadro depois do clique e ler a variável que guarda a fatia escolhida, ela já diria qual nome está prestes a vencer. A roleta não “decide enquanto desacelera”, e não há nenhum momento durante o giro em que o acaso ainda esteja em jogo. Clicar de novo durante um giro não faz nada; o próximo sorteio só acontece quando você inicia o giro seguinte.

De onde vem o número aleatório

Os navegadores oferecem duas formas de obter um número aleatório. Math.random é a do dia a dia, rápida e boa para jogos, mas é uma sequência pseudoaleatória que o navegador não promete tornar imprevisível. crypto.getRandomValues é a outra: ela é alimentada pelo reservatório de entropia do sistema operacional, a mesma fonte usada para gerar chaves de criptografia e tokens de sessão, e é a que a roleta usa.

O código pede um inteiro sem sinal de 32 bits, um número inteiro de 0 a 4.294.967.295, e o divide por 4.294.967.296. Isso dá uma fração de 0 até, mas sem incluir, 1, com todos os valores possíveis igualmente prováveis. Se um navegador muito antigo não tivesse fonte criptográfica, o código recorreria a Math.random em vez de se recusar a girar, mas todo navegador atual, no computador e no celular, aceita crypto.getRandomValues há anos, então na prática esse plano B nunca é usado.

Uma fração é sorteada por giro, e uma segunda só é sorteada para escolher em que ponto da fatia vencedora o ponteiro deve parar. Nenhuma é reaproveitada, armazenada ou enviada a lugar algum. O simulador mais abaixo nesta página chama a mesma função, e é por isso que os resultados dele são um bom substituto da roleta de verdade.

Como um número aleatório vira uma fatia

Pense na roleta como um círculo de 360 graus com o ponteiro fixo no topo. Com oito itens iguais, cada fatia ocupa 45 graus. Multiplique a fração aleatória por 360 e você tem um ângulo; divida esse ângulo por 45 e arredonde para baixo, e você tem a fatia. Uma fração de 0,564 vira 203 graus, que é a fatia número cinco, contando do ponteiro no sentido horário.

0°45°90°135°180°225°270°315°203°

A roleta é um círculo de 360°. Com 8 itens iguais, cada fatia ocupa 45°. O sorteio é um ângulo, e a fatia é só o ângulo dividido pelo tamanho da fatia.

203° ÷ 45° = 4.51 → fatia 5

Com itens com peso as fatias têm tamanhos diferentes, então o ângulo aleatório é comparado com a faixa de cada fatia.

Itens com peso mudam o tamanho das fatias, não o método. Um item escrito como Pizza*3 tem peso 3 e um item comum tem peso 1, então, com Pizza e três itens comuns, o total é 6 e a fatia da Pizza cobre 3 sextos do círculo, 180 graus. O código percorre os itens somando os pesos até o total acumulado passar do número aleatório vezes o peso total, e o item em que ele para é o vencedor. A fatia desenhada na tela é dimensionada pela mesma aritmética, e é por isso que as chances que você vê são as chances que você tem. Um item com peso 0 não recebe nenhum espaço e nunca pode vencer, embora continue visível na lista.

Por que a animação não pode mudar o resultado

Escolhida a fatia, o código define um ângulo de parada em algum ponto entre 15% e 85% do caminho ao longo dela, então o ponteiro nunca termina numa divisa e nunca há empate para resolver. Depois ele soma voltas completas: quatro num giro Curto, sete no Normal, onze no Longo. A roleta se move do ângulo atual até o alvo ao longo de uma curva de desaceleração, rápida no início e diminuindo de forma contínua, e para exatamente no alvo.

Essa curva tem sempre o mesmo formato. Um giro longo não é “mais aleatório” que um curto; é a mesma decisão com mais voltas de enfeite na frente. O estalinho quando o ponteiro passa por cada borda de fatia e o confete no final são produzidos pela animação, não pelo sorteador, e desligá-los não muda nada nas chances. O mesmo vale para roletas com mais de 200 itens, em que a página troca a roleta desenhada por uma lista rolante: o alvo continua sendo escolhido de antemão e a rolagem é cronometrada para parar nele.

É possível viciar a roleta?

Só de formas que você consegue ver. As chances desta roleta são definidas pela lista e por mais nada, e a lista está numa caixa de texto na sua frente. Se um nome aparece duas vezes, ele tem duas fatias. Se leva um *3, ele vale três fatias. As duas coisas são visíveis na roleta como áreas maiores ou repetidas e visíveis como texto. Não existe configuração que faça uma fatia vencer mais vezes sem mudar o tamanho dela, nem servidor envolvido que possa trocar um resultado.

Para um sorteio de brinde, esta é a checagem a oferecer ao seu público: mostre a lista, mostre que cada nome aparece uma vez, sem pesos, e gire em tela cheia. Se você criar um link de compartilhamento, a lista inteira vai codificada no próprio link, então quem o abrir vê a mesma roleta e pode confirmar que não havia nada escondido. A roleta de nomes foi montada exatamente para isso, com Remover vencedor para um nome sorteado não poder sair de novo.

Duas coisas que às vezes são confundidas com viés merecem ser nomeadas. Sequências curtas parecem irregulares: oito nomes e dez giros quase sempre deixam algum nome sem sair e algum nome saindo duas vezes, e é assim que a aleatoriedade se parece em números pequenos. E as pessoas lembram dos giros que combinam com uma história, como o mesmo aluno ser chamado dois dias seguidos, e esquecem das centenas que não combinaram. O simulador abaixo existe para trocar essas duas impressões por contagens.

Teste você mesmo: o simulador de giros

O simulador roda o sorteador de verdade, a mesma função pickWeighted com a mesma fonte criptográfica, quantas vezes você escolher, e pula apenas a animação. Cada barra é uma de oito fatias iguais e a linha tracejada é a contagem que uma divisão perfeitamente igual daria. Tente 100 giros primeiro, depois 100.000, e veja as barras se aproximarem da linha conforme os números crescem.

Esperado por fatia: 125
–Ana
–Beatriz
–Carlos
–Daniela
–Eduardo
–Fernanda
–Gabriel
–Helena
O mesmo sorteador da roleta de verdade, só que sem a animação. A linha tracejada é o que uma divisão perfeitamente igual daria.

Para transformar a imagem em um número, o simulador roda um teste qui-quadrado. Ele pega a contagem de cada fatia, subtrai a contagem esperada, eleva a diferença ao quadrado, divide pela contagem esperada e soma os oito resultados. Um total pequeno significa que todas as barras estão perto da linha; um total grande significa que pelo menos uma barra está longe dela. Com 1.000 giros a contagem esperada é de 125 por fatia, e barras de aproximadamente 105 a 145 são comuns.

O valor-p traduz esse total numa pergunta: se a roleta fosse perfeitamente justa, com que frequência ela produziria uma distribuição pelo menos tão desigual só por sorte? Um valor-p de 0,30 significa que uma roleta justa faz isso cerca de 30% das vezes, o que não tem nada de incomum. A linha do veredito usa o limite convencional de 0,05. Igual ou acima dele, o resultado é compatível com uma roleta justa. Abaixo, a distribuição é uma que uma roleta justa produz menos de uma vez em vinte, o que é raro o bastante para merecer uma segunda olhada.

Ficar abaixo de 0,05 não significa que a roleta tem viés, e é nisso que as pessoas mais erram. Uma rodada justa em vinte cai aí por definição, então, se você pressionar o botão vinte vezes, deve esperar cerca de um aviso. O que uma roleta viciada faz é diferente: ela falha vez após vez, e é sempre a mesma fatia que se destaca. Com oito fatias, o total do qui-quadrado precisa passar de cerca de 14,1 para o valor-p cair abaixo de 0,05; uma roleta que favorecesse uma fatia em silêncio, mesmo por poucos por cento, passaria disso em toda rodada de 100.000 giros e mostraria um valor-p bem abaixo de 0,001.

Se você prefere conferir a roleta de verdade em vez de um simulador, abra qualquer roleta com uma lista curta, defina o Tempo do giro como Curto e gire cem vezes. A aba Resultados guarda todos os resultados da sessão; copie, cole numa planilha e conte. Você verá o mesmo comportamento das barras acima: contagens que oscilam em torno de uma parte igual, variam numa direção diferente a cada sessão e nunca se fixam num favorito.

A roleta da página inicial é a versão de uso geral de tudo o que foi descrito aqui, com pesos, roletas salvas e links de compartilhamento. Se você só precisa de uma decisão justa entre dois lados, a roleta sim ou não alterna Sim e Não ao redor da roleta para as duas respostas terem sempre chances idênticas. Para sortear nomes em que cada escolha precisa ser justa e ser vista como justa, a roleta de nomes guarda o registro de todos os resultados e remove os vencedores à medida que sorteia.

8 itensTempo do giro

Perguntas frequentes

A roleta é realmente aleatória?

É. Cada giro sorteia um número com crypto.getRandomValues, a mesma fonte aleatória que os navegadores usam para chaves de criptografia, e só esse número decide a fatia. A animação começa depois da decisão e apenas leva a roleta até a fatia escolhida.

Dá para viciar uma roleta?

Não por algo que você não consiga ver. As únicas formas de mudar as chances desta roleta são adicionar um item mais de uma vez ou dar a ele um peso, como Nome*3, e as duas aparecem como fatias maiores na roleta e como texto na lista. Não existe configuração oculta, servidor nem conta que possa favorecer um item.

Faz diferença quando eu clico ou quanto tempo a roleta gira?

Não. O número aleatório é sorteado no momento do clique e a fatia fica definida a partir dali. O Tempo do giro só muda quantas voltas a animação dá antes de chegar; Curto, Normal e Longo caem na mesma fatia para o mesmo sorteio.

Como os itens com peso mudam as chances?

A chance de um item é o peso dele dividido pelo peso total da lista. Com quatro itens em que um tem peso 3, esse item tem 3 chances em 6, ou 50%, e a fatia dele ocupa metade da roleta. O número aleatório é comparado com o tamanho dessas fatias, então o desenho e as chances reais são a mesma coisa.

O que significa o valor-p no simulador de giros?

É a probabilidade de uma roleta perfeitamente justa produzir uma distribuição de contagens pelo menos tão desigual quanto a que você acabou de ver. Um valor-p de 0,05 ou mais significa que o resultado é comum numa roleta justa. Um valor abaixo de 0,05 é incomum, mas não prova viés: cerca de uma rodada justa em vinte cai aí por acaso, então rode de novo.

Como posso conferir a roleta de verdade, e não o simulador?

Gire uma roleta com poucos itens cem vezes ou mais e abra a aba Resultados, que guarda todos os resultados da sessão. Copie a lista e conte cada item. As contagens devem ficar perto de uma parte igual e variar em direções diferentes de uma sessão para outra, nunca sempre na direção do mesmo item.

A roleta pode cair numa linha entre duas fatias?

Não. Depois de escolhida a fatia, o ângulo de parada é colocado entre 15% e 85% do caminho ao longo dela, então o ponteiro sempre fica nitidamente dentro. O pequeno balanço do ponteiro ao passar pelas bordas das fatias é só animação.

Mais roletas