Генерация случайных чисел

Задача
Вам нужен источник случайных чисел.

Решение
Вызовите функцию MySQL RAND().

Обсуждение
В MySQL есть функция RAND(), которая генерирует случайные числа в диапазоне от 0 до 1:

mysql> SELECT RAND(), RAND(), RAND();

+-------------------+---------------------+--------------------+
| RAND() | RAND() | RAND() |
+-------------------+---------------------+--------------------+
| 0.31466114177803 | 0.89354679723601 | 0.52375059157959 |
+-------------------+---------------------+--------------------+

Если указать функции целый аргумент, то RAND() использует заданное значение как начало последовательности случайных чисел. При каждой установке определенного значения в качестве начального RAND() будет генерировать повторяющиеся серии чисел:

mysql> SELECT RAND(1), RAND(), RAND();

+--------------------+--------------------+--------------------+
| RAND(1) | RAND() | RAND() |
+--------------------+--------------------+--------------------+
| 0.18109050223705 | 0.75023211143001 | 0.20788908117254 |
+--------------------+--------------------+--------------------+

mysql> SELECT RAND(20000000), RAND(), RAND();

+--------------------+---------------------+--------------------+
| RAND(20000000) | RAND() | RAND() |
+--------------------+---------------------+--------------------+
| 0.24628307879556 | 0.020315642487552 | 0.36272900678472 |
+--------------------+---------------------+--------------------+

mysql> SELECT RAND(1), RAND(), RAND();

+--------------------+--------------------+--------------------+
| RAND(1) | RAND() | RAND() |
+--------------------+--------------------+--------------------+
| 0.18109050223705 | 0.75023211143001 | 0.20788908117254 |
+--------------------+--------------------+--------------------+

mysql> SELECT RAND(20000000), RAND(), RAND();

+--------------------+---------------------+--------------------+
| RAND(20000000) | RAND() | RAND() |
+--------------------+---------------------+--------------------+
| 0.24628307879556 | 0.020315642487552 | 0.36272900678472 |
+--------------------+---------------------+--------------------+

Если вы хотите задавать начало последовательности случайных чисел случайным образом, выбирайте начальное значение RAND(), используя источник энтропии.


Возможными источниками являются текущая временная метка и идентификатор соединения, по отдельности или в сочетании:

mysql> SELECT RAND(UNIX_TIMESTAMP()) AS rand1,
-> RAND(CONNECTION_ID()) AS rand2,
-> RAND(UNIX_TIMESTAMP()+CONNECTION_ID()) AS rand3;

+-------------------+---------------------+--------------------+
| rand1 | rand2 | rand3 |
+-------------------+---------------------+--------------------+
| 0.50452774158169 | 0.18113064782799 | 0.50456789089792 |
+-------------------+---------------------+--------------------+

Однако если у вас есть другие источники начальных значений, лучше использовать их. Например, если в вашей системе имеется устройство /dev/random или /dev/urandom, то вы можете читать это устройство и использовать его для того, чтобы сгенерировать начальное значение для RAND()..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Вычисление линейной регрессии и коэффициентов корреляции
Групповые описательные статистические показатели
Подсчет отсутствующих значений
Получение описательных статистических показателей
Получение частотного распределения

Вернуться в раздел: MySQL / 13. Статистические методы