Распространение RAND() в MySQL

Я не могу найти нигде в документации MySQL, использует ли функция RAND() равномерное распределение или нет. Кто-нибудь знает?

Ответ 1

Я не смог быстро найти исходный код для функции; видя, что это может помочь получить лучший ответ. Тем не менее, это похоже на "нет, но вроде бы близко".

Из документации я вижу, что она пытается быть случайной (и, возможно, вы можете ее засеять); но есть два оговорки, которые означают, что он может не всегда быть единым, если вы ожидаете, что первая проблема будет в нем:

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. 

то есть. код для него сомнительный в том, что он является истинным генератором случайных чисел - он достаточно хорош для большинства целей, но не может быть доверен для использования, скажем, для шифрования, и я бы не стал доверять даже как единую как вы можете ожидать.

Их утверждение о том, что оно не идеально, означает, что он почти наверняка потерпит по крайней мере некоторые из этих тестов; как все еще неясно, но если это не идеальный RNG, вы не увидите абсолютно равномерного распределения; Я бы ожидал либо пробелов, либо пиков диапазонов, которые более/менее распространены. http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (с тех пор была другая работа, но это еще одна из ключевых работ по проверке RNG).

Он поставил бы ставку на то, что код за ним, конечно же, не пытается гарантировать равномерное распределение, так как для этого (отслеживать историю того, что придумано) будет тратить массу памяти. В любом случае, если вы уже создали множество значений, используя идеальный RNG, ничто не гарантирует, что если ваши значения до сих пор были низкими, следующий будет высоким. Он всегда будет таким же случайным.