sql >> Databáze >  >> RDS >> Mysql

Distribuce RAND() v MySQL

Nebyl jsem schopen rychle najít zdrojový kód funkce; vidět to může pomoci získat lepší odpověď. To znamená, že to vypadá jako 'ne.. ale trochu blízko'.

Z dokumentace vidím, že se to snaží být náhodné (a volitelně to můžete osévat); ale existují dvě upozornění, která znamenají, že nemusí být vždy jednotné, když očekáváte, že první vydání je v jeho dokumentaci:

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. 

tj. kód pro něj je sporný, pokud jde o skutečný generátor náhodných čísel - je dost dobrý pro většinu účelů, ale nelze mu věřit pro použití řekněme v šifrování a vsadil bych se, že tomu nelze věřit ani jako uniformní, jak můžete očekávat.

Jejich tvrzení, že to není dokonalé, znamená, že téměř jistě propadne alespoň některým z těchto testů; jak je stále nejasné, ale pokud to není dokonalý RNG, neuvidíte dokonale rovnoměrné rozložení; Očekával bych buď mezery, nebo vrcholy rozsahů, které jsou více/méně běžné.http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (Od té doby byla provedena další práce, ale toto je stále klíčová práce při ověřování RNG).

Vsadil bych se, že kód za tím určitě ne pokuste se zaručit rovnoměrnou distribuci, protože pokud to uděláte (sledovat historii toho, co se již objevilo), plýtvalo by to spoustou paměti. V každém případě, pokud jste již vygenerovali spoustu hodnot pomocí dokonalého RNG, nic nezaručuje, že pokud byly vaše dosavadní hodnoty všechny nízké, další bude vysoká. Vždy to bude stejně náhodné..




  1. Identifikátor automatického přidělování Rails, který již existuje

  2. Analýza MySQL do polí JavaScript pomocí PHP a jQuery

  3. SQL:Použití DATEADD s biginty

  4. Jak zakódujete apostrof, aby bylo možné jej vyhledávat v mysql?