En un mundo ideal, Math.random() sería absolutamente aleatorio, con una salida completamente independiente de otra, que (suponiendo que p = la probabilidad de que se produzca un número dado) da como resultado una probabilidad de p^2 para cualquier valor que se repite inmediatamente después de otro (como otros ya han dicho).
En la práctica, las personas quieren que Math.random sea rápido, lo que significa que los motores utilizan generadores de números pseudoaleatorios. Hay muchos tipos diferentes de PRNG pero el más básico es un generador de congruencia lineal, que es básicamente una función a lo largo de las líneas de:
s(n + 1) = some_prime * s(n) + some_value mod some_other_prime
Si se utiliza un generador de este tipo, entonces no verá un valor repite hasta usted ha llamado random()
some_other_prime
veces. Estás garantizado de eso.
Relativamente recientemente, sin embargo, es evidente que este tipo de comportamiento (junto con la propagación de los PRNG con la hora actual) podría utilizarse para rastrear formularios, lo que hace que los navegadores realicen una serie de acciones que impliquen no poder asumir nada acerca de las siguientes llamadas random()
.
uno que pueda afectar siendo un pseudo aleatoria, se calcularlos tan rápido, sin tiempo para cambiar la semilla, por lo que producirá el mismo número. Creo que la mayoría lo afectará porque será dependiente de la semilla. –
En realidad, @Eric, eso no es correcto. Cambiar la semilla periódicamente hace que los números no sean más aleatorios, y muy probablemente menos aleatorios porque el estado inicial cambia de manera computable. Hay algunos defectos criptográficos oscuros preciosos que aparecen de esa manera. –
@ Charlie, eso dependerá de la implementación, no sé cómo funciona JS al azar. Cuando comencé a programar, ese fue uno de mis primeros problemas al obtener la misma repetición aleatoria. Y me perdí de leer el título, por lo que @Tommy es probable que sea incorrecto lo que dije. –