Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Distribuição de RAND() no MySQL


Não consegui encontrar o código-fonte da função rapidamente; vê-lo pode ajudar a obter uma resposta melhor. Dito isto, parece um 'não .. mas meio perto'.

Na documentação, posso ver que tenta ser aleatório (e, opcionalmente, você pode semeá-lo); mas há duas ressalvas que significam que nem sempre pode ser uniforme quando você espera que o primeiro problema esteja em sua documentação:
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. 

ou seja, o código para ele é questionável por ser um verdadeiro gerador de números aleatórios - é bom o suficiente para a maioria dos propósitos, mas não pode ser confiável para uso em, digamos, criptografia, e eu aposto que não pode ser confiável para ser tão uniforme como você pode esperar.

Sua alegação de que não é perfeito significa que quase certamente falhará em pelo menos alguns desses testes; o como ainda não está claro, mas se não for um RNG perfeito, você não verá uma distribuição perfeitamente uniforme; Eu esperaria intervalos ou picos de intervalos mais/menos comuns.http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (houve outro trabalho desde então, mas este ainda é um dos principais trabalhos na validação de RNGs).

Aposto que o código por trás dele certamente não tente garantir uma distribuição uniforme, pois fazer isso (acompanhar o histórico do que já surgiu) desperdiçaria muita memória. De qualquer forma, se você já gerou muitos valores usando um RNG perfeito, nada garante que se seus valores até agora foram todos baixos o próximo será alto. Será sempre tão aleatório..