Какова периодичность PRNG в библиотеке GNU C? - PullRequest
4 голосов
/ 11 июня 2011

Есть ли литература по периодичности генератора случайных чисел в gcc g ++ (если мы не перезапускаем функцию)?Полагаю, я мог бы сам проводить тесты, но было бы лучше иметь доступ к хорошо проверенным исследованиям.

Заранее спасибо за вашу помощь.Я просто хотел добавить, что я искал довольно много, с несколькими двигателями, но я не нашел ничего конкретного.Я только прочитал общие комментарии о том, что периодичность ограничена количеством битов, необходимых для представления начального числа.(Поэтому я предполагаю, что, учитывая тот факт, что srand обычно вызывается со временем, периодичность может быть не более 10 ^ 12 или около того. Но что-то более определенное было бы очень полезно, прежде чем я начну реализовывать свои алгоритмы.)

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

При поиске на man-странице rand (3) я нашел это:

Версии rand () и srand () в библиотека Linux C использует то же самое генератор случайных чисел как random () и srandom ()

поэтому я посмотрел на случайную (3) справочную страницу, и вот ваш ответ:

Период этого случайного числа генератор очень большой, примерно 16 * ((2 ** 31) -1) * 1 011 *

Это может быть весьма полезно для педагогических целей, поскольку вы хотите разработать собственный PRNG. Тем не менее, я бы не рекомендовал использовать этот PRNG при разработке приложения. Вы должны предпочесть одну из реализаций Boost.Random в соответствии с предложением @Neil Butterworth (MT19937 - хороший PRNG по умолчанию, достаточный для большинства приложений).

Наконец, если вы намереваетесь узнать больше о PRNG, я бы посоветовал вам прочитать эти две научные статьи, в которых подробно рассматриваются PRNG.

Практическое распределение случайных потоков для стохастических высокопроизводительных вычислений , Дэвид Р. Хилл, в Международная конференция по высокопроизводительным вычислениям и моделированию (HPCS) , 2010

Генераторы псевдослучайных чисел , Пьер Л'Экуайер, в Энциклопедия количественных финансов Энциклопедия количественных финансов , 2008

4 голосов
/ 11 июня 2011

Функции srand / rand немного нарушены. Поскольку вы используете C ++, я настоятельно рекомендую вам использовать ускоренную библиотеку случайных чисел. Это библиотека только для заголовков, поэтому вам не нужно ничего создавать. Вот пример того, как его использовать здесь .

...