Mysql
 sql >> Database >  >> RDS >> Mysql

Distribuzione di RAND() in MySQL

Non sono stato in grado di trovare rapidamente il codice sorgente per la funzione; vederlo potrebbe aiutare a ottenere una risposta migliore. Detto questo, sembra un "no... ma un po' vicino".

Dalla documentazione posso vedere che cerca di essere casuale (e opzionalmente puoi seminarlo); ma ci sono due avvertimenti che significano che potrebbe non essere sempre uniforme quando ti aspetti che il primo problema sia nella sua documentazione:

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. 

cioè il codice per esso è discutibile in quanto un vero generatore di numeri casuali:è abbastanza buono per la maggior parte degli scopi, ma non ci si può fidare per l'uso, ad esempio, nella crittografia, e scommetto che non ci si può nemmeno fidare di essere come uniforme come ci si può aspettare.

La loro affermazione che non è perfetto significa che quasi sicuramente fallirà almeno alcuni di questi test; il come non è ancora chiaro, ma se non è un RNG perfetto, non vedrai una distribuzione perfettamente uniforme; Mi aspetterei divari o picchi di intervalli più/meno comuni.http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (c'è stato altro lavoro da allora, ma questo è ancora uno dei lavori chiave nella convalida degli RNG).

Scommetto che il codice dietro di esso certamente non cercare di garantire una distribuzione uniforme, poiché farlo (traccia la cronologia di ciò che è già uscito) sprecherebbe masse di memoria. In ogni caso, se hai già generato molti valori utilizzando un RNG perfetto, nulla garantisce che se i tuoi valori finora erano tutti bassi, quello successivo sarà alto. Sarà sempre altrettanto casuale..