Функция rand () в c следует недетерминированному алгоритму (?)
Нет. int rand(void)
и void srand(unsigned int seed)
работают вместе, образуя последовательность псевдослучайных
номера. Повторное заполнение с srand()
и тем же начальным числом сгенерирует одну и ту же детерминированную последовательность.
Функция rand
вычисляет последовательность псевдослучайных чисел в диапазоне от 0 до
RAND_MAX
C11dr §7.22.2.1 2
Функция srand
использует аргумент в качестве начального числа для новой последовательности псевдослучайных чисел, которая будет возвращена последующими вызовами rand. Если затем вызывается srand
с тем же начальным значением, последовательность псевдослучайных чисел должна повторяться . Если rand
вызывается до того, как были сделаны какие-либо вызовы srand
, генерируется та же последовательность, что и при первом вызове srand
со начальным значением 1. §7.22.2.2 2
Примечание: эта последовательность может отличаться от компилятора к компилятору, но в пределах данной компиляции последовательность является детерминированной.