Генератор случайных чисел имеет состояние - это фактически необходимая функция. Следующее «случайное» число является функцией предыдущего числа и начального числа / состояния. Пуристы называют их генераторами псевдослучайных чисел. Числа пройдут статистические тесты на случайность, но на самом деле они не случайны.
Последовательность случайных значений конечна и повторяется.
Думайте о генераторе случайных чисел как о перемешивании набора чисел, а затем раздаче их в случайном порядке. Семя используется для "перемешивания" чисел. Как только начальное число задано, последовательность чисел является фиксированной и ее очень трудно предсказать. Некоторые семена будут повторяться раньше, чем другие.
У большинства генераторов период достаточно велик, чтобы никто не заметил его повторения. 48-битный генератор случайных чисел произведет несколько сотен миллиардов случайных чисел, прежде чем он повторится - с (AFAIK) любым 32-битным начальным значением.
Генератор будет только генерировать случайные значения, когда вы дадите ему одно начальное число и дадите ему выбросить значения. Если вы измените начальные числа, то числа, сгенерированные с новым начальным значением, могут не выглядеть случайными по сравнению со значениями, сгенерированными предыдущим начальным числом - все ставки отключаются при изменении начальных чисел. Так что не надо.
Разумный подход состоит в том, чтобы иметь один генератор и «раздавать» номера вашим различным клиентам. Не связывайтесь с созданием и отказом от генераторов. Не связывайтесь со сменой семян.
Прежде всего, никогда не пытайтесь написать свой собственный генератор случайных чисел. Встроенные генераторы в большинстве языковых библиотек действительно хороши. Особенно современные, использующие более 32 бит.
Некоторые дистрибутивы Linux имеют устройства /dev/random
и /dev/urandom
. Вы можете прочитать их один раз, чтобы заполнить генератор случайных чисел вашего приложения. Они имеют более или менее случайные значения, но они работают, собирая шум от случайных системных событий. Используйте их экономно, чтобы между использованиями было много случайных событий.