используя функцию времени для srand в генераторе псевдослучайных чисел в c

#include <time.h>
((unsigned)time(NULL));

Я не понимаю, почему вы должны включать заголовочный файл времени и использовать функцию времени в своей программе при создании генератора псевдослучайных чисел с помощью функции srand(). Может кто-нибудь объяснить, какое значение имеет время в этом случае?

* Обратите внимание, что показанный код является лишь частью программы. Спасибо.


person Nisarg    schedule 25.07.2013    source источник


Ответы (2)


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

person Jiminion    schedule 25.07.2013

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

Если вы не вызываете time(NULL) или какой-либо другой источник энтропии (например, /dev/rand), то последовательность по-прежнему будет псевдослучайной (нелегко предсказать путем изучения значений), но она будет в точности одинаково для каждого запуска программы. Потому что, хотя может быть очень сложно точно предсказать следующее число, это возможно возможно, поскольку PRNG детерминирован.

Если вы не укажете собственное начальное число с srand(), начальное начальное число по умолчанию обычно равно 1.

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

person luser droog    schedule 25.07.2013
comment
Детерминированная часть на самом деле очень полезна. Я написал программу для рисования случайных деревьев и поскольку он печатает начальное значение для каждого изображения, одно и то же изображение может быть повторно сгенерировано путем повторного использования того же начального значения (если только изменения в программе не изменят использование rand или количество вызовов rand, так как они изменят образец числа, протекающего через программу). В частности, для отладки плохого запуска возможность перезапустить ту же последовательность очень, очень полезна. - person luser droog; 26.07.2013