Подтвердить что ты не робот

Является ли последовательность случайных чисел, порожденных rand в C, гарантированной всегда одинаковой для одного и того же семени?

Мне просто интересно, будет ли функция rand (http://www.cplusplus.com/reference/cstdlib/rand/ генерировать ту же последовательность случайных чисел, а используя < сильное > одно и то же семя, при запуске в разных libc реализациях и даже разных компиляторах и операционных системах (win, linux).

Я провел несколько тестов с использованием различных компиляторов (g++ 4.8, g++ 5.1 и clang), и кажется, что ответ "да", однако я не нашел "официального" упоминания алгоритма PRNG, используемого в C генерация случайных чисел (http://pubs.opengroup.org/onlinepubs/009604599/functions/rand.html), или следует ли их упоминать в стандартах...

4b9b3361

Ответ 1

В стандарте нет гарантии того, что будет сгенерировано:

Из стандарта:

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

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

Ответ 2

Не указано даже RAND_MAX, чтобы иметь заданное значение в реализациях C, отличное от этого, должно быть >= 32767. Таким образом, rand() в одной реализации может возвращать другой диапазон значений, чем другой, и, следовательно, другую последовательность.

Функция rand вычисляет последовательность псевдослучайных целых чисел в диапазон от 0 до RAND_MAX. C11dr §7.22.2.1 2

Значение макроса RAND_MAX должно быть не менее 32767. C11dr §7.22.2.1 5

RAND_MAX, который расширяется до целочисленного постоянного выражения, которое является максимальным значением, возвращаемым функцией rand. § 7.22 3

Даже с тем же RAND_MAX, обратите внимание на @Servé Laurijssen: последовательность значений из rand() может отличаться.


Примечание: подразумевается, RAND_MAX <= INT_MAX.

Ответ 3

В соответствии с fooobar.com/info/203398/... ответ отрицательный. Нет никакой гарантии в разных реализациях.