sql >> Base de Datos >  >> RDS >> Mysql

Distribución de RAND() en MySQL

No he podido encontrar el código fuente de la función rápidamente; verlo podría ayudar a obtener una mejor respuesta. Dicho esto, parece un 'no... pero un poco cerca'.

De la documentación, puedo ver que intenta ser aleatorio (y, opcionalmente, puede sembrarlo); pero hay dos advertencias que significan que es posible que no siempre sea uniforme cuando espera que el primer problema se encuentre en su documentación:

RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers on demand that is portable between platforms for the same MySQL version. 

es decir, el código para él es cuestionable por ser un verdadero generador de números aleatorios:es lo suficientemente bueno para la mayoría de los propósitos, pero no se puede confiar en su uso, por ejemplo, en el cifrado, y apuesto a que no se puede confiar en que sea tan uniforme como es de esperar.

Su afirmación de que no es perfecto significa que es casi seguro que fallará al menos en algunas de estas pruebas; el cómo aún no está claro, pero si no es un RNG perfecto, no verá una distribución perfectamente uniforme; Esperaría brechas o picos de rangos que son más o menos comunes.http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (Ha habido otro trabajo desde entonces, pero este sigue siendo parte del trabajo clave en la validación de RNG).

Apostaría a que el código detrás ciertamente no intente garantizar una distribución uniforme, ya que hacerlo (rastrear el historial de lo que ya apareció) desperdiciaría grandes cantidades de memoria. En cualquier caso, si ya generaste muchos valores usando un RNG perfecto, nada garantiza que si tus valores hasta ahora eran todos bajos, el próximo será alto. Siempre será igual de aleatorio..