sql >> Databasteknik >  >> RDS >> Mysql

Distribution av RAND() i MySQL

Jag har inte kunnat hitta källkoden för funktionen snabbt; att se det kan hjälpa dig att få ett bättre svar. Som sagt, det ser ut som ett "nej... men ganska nära".

Av dokumentation kan jag se att det försöker vara slumpmässigt (och valfritt kan du seed det); men det finns två varningar som gör att det kanske inte alltid är enhetligt när du förväntar dig att det första numret finns i dess dokumentation:

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. 

det vill säga koden för den är tveksam eftersom den är en sann slumptalsgenerator - den är tillräckligt bra för de flesta ändamål, men kan inte litas på för användning i t.ex. kryptering, och jag skulle satsa att den inte ens är så uniform som du kan förvänta dig.

Deras påstående att det inte är perfekt betyder att det nästan säkert kommer att misslyckas åtminstone några av dessa tester; hur är fortfarande oklart, men om det inte är en perfekt RNG kommer du inte att se en perfekt enhetlig fördelning; Jag förväntar mig antingen luckor eller toppar av intervall som är mer/mindre vanliga.http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (det har varit annat arbete sedan dess, men detta är fortfarande en del av nyckelarbetet för att validera RNG:er).

Det skulle satsa på att koden bakom det verkligen inte försök att garantera en enhetlig fördelning, eftersom det skulle slösa massor av minne att göra det (spåra historik över vad som redan har kommit upp). I vilket fall som helst, om du redan har genererat många värden med en perfekt RNG, garanterar ingenting att om dina värden hittills alla var låga kommer nästa att vara hög. Det kommer alltid att vara lika slumpmässigt..




  1. Postgresql base64-kodning

  2. Mysql Skapa tabell med Trigger

  3. Hur optimerar man en tabell för AVG-fråga?

  4. Bestäm nästa nummer i databasfrågan med while loop i php