Spinner.tools

¿La ruleta es aleatoria?

Sí. El sector ganador se elige en el instante del clic, con la fuente aleatoria criptográfica del navegador. Aquí ves cómo funciona y cómo comprobarlo tú mismo.

La ruleta es aleatoria: cada giro toma un número nuevo de crypto.getRandomValues, la fuente aleatoria criptográfica integrada en el navegador, y ese número por sí solo decide qué sector gana. La decisión ocurre en el instante del clic, antes de que la ruleta empiece a moverse, y nada de la animación, del momento ni de los resultados anteriores puede cambiarla. El resto de esta página muestra cada paso y termina con un simulador para que compruebes la afirmación con tus propios ojos.

Qué pasa cuando haces clic en girar

Pasan tres cosas en orden, y el orden es lo esencial. Primero, el navegador entrega un número aleatorio y el código lo usa para elegir un sector. Segundo, el código calcula un ángulo de parada dentro de ese sector y le suma varias vueltas completas. Tercero, la ruleta se anima desde donde está hasta ese ángulo, frenando siguiendo una curva fija hasta detenerse.

  1. 1El sector ganador se elige en el instante en que haces clic, con los números aleatorios criptográficos del navegador.
  2. 2La ruleta da varias vueltas completas y frena siguiendo una curva fija hacia ese sector.
  3. 3La flecha se detiene dentro del sector, lejos de los bordes, así que nunca hay empate.

El giro que ves es entonces una repetición de una decisión ya tomada. Si pudieras pausar la animación un cuadro después del clic y leer la variable que guarda el sector elegido, ya diría qué nombre está a punto de ganar. La ruleta no «decide mientras frena», y no hay ningún momento durante el giro en que el azar siga interviniendo. Volver a hacer clic durante un giro no hace nada; el siguiente sorteo ocurre solo cuando empiezas el siguiente giro.

De dónde sale el número aleatorio

Los navegadores ofrecen dos maneras de obtener un número aleatorio. Math.random es la de siempre, rápida y suficiente para juegos, pero es una secuencia pseudoaleatoria que el navegador no promete que sea impredecible. crypto.getRandomValues es la otra: se alimenta de la reserva de entropía del sistema operativo, la misma fuente que se usa para generar claves de cifrado y tokens de sesión, y es la que usa la ruleta.

El código pide un entero sin signo de 32 bits, un número entero de 0 a 4.294.967.295, y lo divide entre 4.294.967.296. Eso da una fracción de 0 hasta, sin llegar a, 1, con todos los valores posibles igual de probables. Si un navegador muy antiguo no tuviera ninguna fuente criptográfica, el código recurriría a Math.random en lugar de negarse a girar, pero todos los navegadores actuales de escritorio y de celular admiten crypto.getRandomValues desde hace años, así que en la práctica ese recurso nunca se ejecuta.

Se genera una fracción por giro, y se genera una segunda solo para elegir en qué punto dentro del sector ganador debe quedar la flecha. Ninguna se reutiliza, se guarda ni se envía a ningún lado. El simulador que aparece más abajo en esta página llama a la misma función, por eso sus resultados son un buen sustituto de la ruleta real.

Cómo un número aleatorio se convierte en un sector

Piensa en la ruleta como un círculo de 360 grados con la flecha fija arriba. Con ocho entradas iguales, cada sector abarca 45 grados. Multiplica la fracción aleatoria por 360 y obtienes un ángulo; divide ese ángulo entre 45 y redondea hacia abajo, y tienes el sector. Una fracción de 0,564 se convierte en 203 grados, que es el sector número cinco, contando desde la flecha en el sentido de las agujas del reloj.

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

La ruleta es un círculo de 360°. Con 8 entradas iguales, cada sector abarca 45°. El sorteo da un ángulo, y el sector es ese ángulo dividido entre el tamaño del sector.

203° ÷ 45° = 4.51 → sector 5

Con entradas con peso los sectores tienen tamaños distintos, así que el ángulo aleatorio se compara con el rango propio de cada sector.

Las entradas con peso cambian el tamaño de los sectores, no el método. Una entrada escrita como Pizza*3 tiene peso 3 y una entrada normal tiene peso 1, así que con Pizza y tres entradas normales el total es 6 y el sector de Pizza cubre 3 sextos del círculo, 180 grados. El código recorre las entradas sumando pesos hasta que el total acumulado supera el número aleatorio multiplicado por el peso total, y la entrada en la que se detiene es la ganadora. El sector dibujado en pantalla se dimensiona con exactamente la misma aritmética, por eso las probabilidades que ves son las que obtienes. Una entrada con peso 0 no recibe ningún tramo y nunca puede ganar, aunque sigue visible en la lista.

Por qué la animación no puede cambiar el resultado

Una vez elegido el sector, el código escoge un ángulo de reposo en algún punto entre el 15 % y el 85 % del ancho de ese sector, de modo que la flecha nunca termina en un borde y nunca hay un empate que resolver. Luego suma vueltas completas: cuatro en un giro Corto, siete en Normal, once en Largo. La ruleta va de su ángulo actual al ángulo de destino siguiendo una curva de frenado suave, rápida al principio y cada vez más lenta, y se detiene exactamente en el destino.

Esa curva tiene siempre la misma forma. Un giro largo no es «más aleatorio» que uno corto; es la misma decisión con más vueltas de adorno delante. El sonido de clics cuando la flecha pasa por cada borde de sector y el confeti del final los produce la animación, no el selector, y apagarlos no cambia nada en las probabilidades. Lo mismo ocurre con las ruletas de más de 200 entradas, donde la página cambia la ruleta dibujada por una lista rodante: el destino se elige igualmente de antemano y el recorrido se ajusta para detenerse en él.

¿Se puede arreglar la ruleta?

Solo de maneras que puedes ver. Las probabilidades de esta ruleta las fija la lista y nada más, y la lista está en un cuadro de texto frente a ti. Si un nombre aparece dos veces, tiene dos sectores. Si lleva un *3, tiene el espacio de tres sectores. Ambas cosas se ven en la ruleta como áreas más grandes o repetidas, y también se ven como texto. No hay ningún ajuste que haga que un sector gane más seguido sin cambiar su tamaño, y no interviene ningún servidor que pueda sustituir un resultado.

Para un sorteo, esta es la comprobación que puedes ofrecer a tu público: muestra la lista, muestra que cada nombre aparece una vez y sin pesos, y gira en pantalla completa. Si creas un enlace para compartir, toda la lista va codificada en el propio enlace, así que cualquiera que lo abra ve la misma ruleta y puede confirmar que no había nada oculto. La ruleta de nombres está pensada justo para esto, con Quitar ganador para que un nombre sorteado no pueda salir dos veces.

Vale la pena nombrar dos cosas que a veces se confunden con sesgo. Las rachas cortas se ven disparejas: con ocho nombres y diez giros casi siempre sobra algún nombre sin salir y algún otro sale dos veces, y así se ve el azar con números pequeños. Y la gente recuerda los giros que encajan con una historia, como que elijan al mismo alumno dos días seguidos, y olvida los cientos que no encajaron. El simulador de abajo existe para reemplazar ambas impresiones con conteos.

Compruébalo tú mismo: el simulador de giros

El simulador ejecuta el selector real, la misma función pickWeighted con la misma fuente criptográfica, tantas veces como elijas, y se salta solo la animación. Cada barra es uno de ocho sectores iguales y la línea punteada es el conteo que daría un reparto perfectamente parejo. Prueba primero con 100 giros y luego con 100.000, y observa cómo las barras se acercan a la línea a medida que crecen los números.

Esperado por sector: 125
–Ana
–Beatriz
–Carlos
–Diana
–Emilio
–Fátima
–Gabriel
–Hugo
El mismo selector de la ruleta real, solo que sin la animación. La línea punteada es lo que daría un reparto perfectamente parejo.

Para convertir la imagen en un número, el simulador ejecuta una prueba de chi cuadrado. Toma el conteo de cada sector, le resta el conteo esperado, eleva la diferencia al cuadrado, la divide entre el conteo esperado y suma los ocho resultados. Un total pequeño significa que todas las barras están cerca de la línea; un total grande significa que al menos una está lejos. Con 1000 giros el conteo esperado es 125 por sector, y las barras entre aproximadamente 105 y 145 son normales.

El valor p traduce ese total en una pregunta: si la ruleta fuera perfectamente justa, ¿con qué frecuencia produciría solo por suerte un reparto al menos así de desigual? Un valor p de 0,30 significa que una ruleta justa lo hace alrededor del 30 % de las veces, algo nada inusual. La línea del veredicto usa el umbral convencional de 0,05. Igual o por encima, el resultado es coherente con una ruleta justa. Por debajo, el reparto es uno que una ruleta justa produce menos de una vez de cada veinte, lo bastante raro para merecer una segunda mirada.

Estar por debajo de 0,05 no significa que la ruleta tenga sesgo, y aquí es donde la gente se equivoca. Una corrida justa de cada veinte cae ahí por definición, así que si pulsas el botón veinte veces, lo normal es ver más o menos una advertencia. Lo que hace una ruleta sesgada es distinto: falla una y otra vez, y el mismo sector es el que sobresale cada vez. Con ocho sectores, el total de chi cuadrado tiene que pasar de aproximadamente 14,1 para que el valor p baje de 0,05; una ruleta que favoreciera en silencio a un sector aunque fuera por unos pocos puntos porcentuales superaría ese umbral en cada corrida de 100.000 giros y mostraría un valor p muy por debajo de 0,001.

Si prefieres revisar la ruleta real en lugar de un simulador, abre cualquier ruleta con una lista corta, pon la Duración del giro en Corto y gírala cien veces. La pestaña Resultados guarda todos los resultados de la sesión; cópiala, pégala en una hoja de cálculo y cuenta. Verás el mismo comportamiento que en las barras de arriba: conteos que se mueven alrededor de un reparto parejo, se desvían en una dirección distinta en cada sesión y nunca se quedan con un favorito.

La ruleta aleatoria de la página de inicio es la versión general de todo lo descrito arriba, con pesos, ruletas guardadas y enlaces para compartir. Si solo necesitas una decisión justa entre dos opciones, la ruleta sí o no alterna Sí y No alrededor de la ruleta para que las dos respuestas tengan siempre probabilidades idénticas. Para sortear nombres cuando cada elección debe ser justa y verse justa, la ruleta de nombres guarda un registro de cada resultado y quita a los ganadores sobre la marcha.

8 entradasDuración del giro

Preguntas frecuentes

¿La ruleta aleatoria es de verdad al azar?

Sí. Cada giro toma un número de crypto.getRandomValues, la misma fuente aleatoria que los navegadores usan para las claves de cifrado, y ese número por sí solo decide el sector. La animación empieza después de la decisión y solo lleva la ruleta hasta el sector elegido.

¿Se puede arreglar una ruleta para que salga lo que uno quiere?

No con nada que no puedas ver. Las únicas formas de cambiar las probabilidades en esta ruleta son agregar una entrada más de una vez o darle un peso como Nombre*3, y ambas se ven como sectores más grandes en la ruleta y como texto en la lista. No hay ningún ajuste oculto, ni servidor, ni cuenta que pueda favorecer a una entrada.

¿Importa cuándo hago clic o cuánto dura el giro?

No. El número aleatorio se genera en el momento del clic y desde ahí el sector queda fijo. El ajuste de Duración del giro solo cambia cuántas vueltas da la animación antes de llegar; Corto, Normal y Largo caen en el mismo sector para el mismo sorteo.

¿Cómo cambian las probabilidades las entradas con peso?

La probabilidad de una entrada es su peso dividido entre el peso total de la lista. Con cuatro entradas en las que una pesa 3, esa entrada tiene 3 de 6 oportunidades, es decir, el 50 %, y su sector ocupa la mitad de la ruleta. El número aleatorio se compara con esos tamaños de sector, así que el dibujo y las probabilidades reales son lo mismo.

¿Qué significa el valor p del simulador de giros?

Es la probabilidad de que una ruleta perfectamente justa produzca un reparto de conteos al menos tan desigual como el que acabas de ver. Un valor p de 0,05 o más indica que el resultado es normal para una ruleta justa. Un valor menor que 0,05 es inusual pero no prueba que haya sesgo: aproximadamente 1 de cada 20 corridas justas cae ahí por casualidad, así que vuelve a correrlo.

¿Cómo puedo comprobar la ruleta real y no el simulador?

Gira cien veces o más una ruleta con pocas entradas y abre la pestaña Resultados, que guarda todos los resultados de la sesión. Copia la lista y cuenta cada entrada. Los conteos deben quedar cerca de un reparto parejo y desviarse en direcciones distintas de una sesión a otra, nunca de forma constante hacia la misma entrada.

¿Puede la ruleta caer en la línea entre dos sectores?

No. Una vez elegido el sector, el ángulo de parada se coloca entre el 15 % y el 85 % del ancho de ese sector, de modo que la flecha siempre queda claramente dentro. El pequeño vaivén de la flecha al pasar por los bordes de los sectores es solo animación.

Más ruletas