Меня немного смущает реализация генератора случайных чисел в C, который также явно отличается от реализации в С++
Если я правильно понял, вызов "srand (seed)" каким-то образом инициализирует скрытую переменную (семя), доступную с помощью "rand()", которая, в свою очередь, указывает функцию на предварительно сгенерированную последовательность, например для пример этого. Каждый последующий вызов "rand()" продвигает последовательность (и, видимо, существуют другие способы продвижения на С++), что также предполагает использование внутреннего скрытого указателя или счетчика для отслеживания продвижения.
Я нашел много дискуссий о том, как работают алгоритмы для генерации псевдослучайных чисел и документации по функциям rand() и srand(), но не смогли найти информацию об этих скрытых параметрах и их поведении, кроме того, что в соответствии с этим источником, они не являются потокобезопасными.
-
Может ли кто-нибудь здесь пролить свет на то, как определяются эти параметры и каково должно быть их определенное поведение в соответствии со стандартами, или если их поведение определяется реализацией?
-
Ожидают ли они быть локальными для функции/метода, который вызывает rand() и srand()? Если да, существует ли способ передать их другой функции/методу?
Если ваш ответ специфичен для C или С++, пожалуйста, будьте любезны, чтобы указать на это. Любая информация будет высоко оценена. Пожалуйста, имейте в виду, что этот вопрос касается не предсказуемости данных, генерируемых rand() и srand(), а о требованиях, статусе и функционировании их внутренних переменных а также их доступности и охвата.