System.Nullable 'не содержит определения «OK»

Я пытаюсь привести пример диалога с основным файлом из здесь , особенно с настройкой экспериментального кода. Наблюдая за наблюдением, я бы сказал, что rand (), кажется, дает то же самое ...

Мне очень нравится, что я могу генерировать один и тот же набор псевдослучайных данных многократно, особенно с настройкой экспериментального кода. Наблюдая за наблюдением, я бы сказал, что rand () , кажется, каждый раз дает одну и ту же последовательность чисел *.

Гарантируется ли это делать для повторных выполнений на одной и той же машине / для разных машин / для разных архитектуры? 1284 * Очевидно, что для того же семени.

6
задан Joe 17 August 2010 в 14:59
поделиться

5 ответов

Да, учитывая ту же среду для программы. Из стандарта C §7.20.2.2 / 2,

Функция srand использует аргумент в качестве начального числа для новой последовательности псевдослучайных чисел, возвращаемых последующими вызовами rand . Если затем вызывается srand с тем же начальным значением, последовательность псевдослучайных чисел должна быть повторена. Если rand вызывается до того, как будут выполнены какие-либо вызовы srand , должна быть сгенерирована та же последовательность, что и при первом вызове srand с начальным значением of 1.

Конечно, это предполагает, что используется одна и та же деталь реализации (то есть та же машина, та же библиотека в тот же период выполнения). Стандарт C не требует стандартного алгоритма генерации случайных чисел, поэтому, если вы запустите программу с другой стандартной библиотекой C, можно получить другую последовательность случайных чисел.

См. Вопрос Согласованные псевдослучайные числа на разных платформах , если вам нужна переносимая и гарантированная последовательность случайных чисел с заданным начальным числом.

20
ответ дан 8 December 2019 в 05:19
поделиться

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

Реализация будет соответствовать выбору «главного начального числа» при каждом запуске программы и использовать его для возмущения генератора псевдослучайных чисел способом, который будет отличаться при каждом запуске программы.

Если вы хотите большего детерминизма, вам следует реализовать в программе ГПСЧ с определенными параметрами.

2
ответ дан 8 December 2019 в 05:19
поделиться

Нет.

Стандарт C говорит:

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

Но нигде не сказано, что такое последовательность псевдослучайных чисел на самом деле - поэтому она различается в разных реализациях.

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

1
ответ дан 8 December 2019 в 05:19
поделиться

Если вам нужно использовать точно такой же набор псевдослучайных чисел в экспериментальных целях, вы можете использовать srand для генерации длинной последовательности случайных чисел. числа и записать их в файл / базу данных. Затем напишите портативную функцию «генератора случайных чисел», которая последовательно возвращает значения из этого файла. Таким образом, вы можете быть уверены, что используете одни и те же входные данные независимо от платформы, реализации srand или начального значения.

0
ответ дан 8 December 2019 в 05:19
поделиться

При переключении на другую машину / среду выполнения / что-то еще, возможно, вам не повезло. Существует еще один возможный выбор семейства функций drand48 . Они нормализованы для использования одного и того же алгоритма на всех машинах.

0
ответ дан 8 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: