Когда я запускаю свой код Fortran более одного раза, значение в файле точно такое же [дубликат]

Я тоже искал решение, и, к счастью, нашел этот сайт Hide My Referrer . Меня поразило то, что он даже работает для https> https-запросов.

Он создаст ссылку, которую вы можете использовать, которая будет делать именно то, что вы ищете.

7
задан ire_and_curses 27 May 2014 в 02:05
поделиться

2 ответа

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

7
ответ дан janneb 17 August 2018 в 12:24
поделиться
  • 1
    И способ сделать это - вызвать RANDOM_SEED без аргументов. В большинстве реализаций это будет «рандомизировать». семя. – Steve Lionel 28 May 2014 в 02:15
  • 2
    @SteveLionel. Поскольку вопрос отмечен gfortran, я хочу заметить, что эта реализация, похоже, не одна из них. – francescalus 28 May 2014 в 09:32
  • 3
    @francescalus да, действительно, это так. Я нахожу это довольно удивительным. Однако в стандарте утверждается, что такой вызов инициализирует семя в "зависимой от реализации" мода, и то, что делает gfortran, разрешено стандартом. gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html дает пример того, как рандомизировать семя, но ... yuck. – Steve Lionel 28 May 2014 в 16:27
  • 4
    Это не так плохо, как кажется. этот "странный" поведение позволяет последовательности случайных чисел быть одинаковыми от одного запуска вашего кода до следующего. это позволяет упростить тестирование для сильно стохастических систем. однако в той же программе номера являются «случайными». если вы хотите, чтобы случайные числа отличались от одного прогона к другому, вы используете RANDOM_SEED. Я считаю, что это хорошая реализация в целом. – physphun 29 May 2014 в 16:15

Последовательность псевдослучайных чисел, поступающих от вызова (s) до random_number, зависит от алгоритма, используемого процессором, и значения семени.

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

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

Как указано в другом ответе , внутреннее random_seed можно использовать для установки значение семени и перезапустить псевдослучайный генератор. Опять же, это зависит от процессора, что происходит, когда вызов call random_seed() (то есть без аргумента put=). Некоторые процессоры будут перезапускать генератор с повторяемой последовательностью, а некоторые - нет. gfortran (опять же, перед версией 7) находится в первой категории.

Для процессоров, где call random_seed() приводит к повторяемой последовательности, для генерации отдельных последовательностей потребуется явное переменное семя во время выполнения. Пример для более старых версий gfortran можно найти в документации .

Следует отметить, что выбор семени может быть сложной задачей. Мало того, что будут проблемы с переносимостью, но может потребоваться помощь в обеспечении того, чтобы генератор не перезапускался в области с низкой энтропией. Для программ с несколькими изображениями пользователь должен будет работать, чтобы иметь разные последовательности на этих изображениях.

В заключительной заметке в проекте стандарта Fortran 2018 есть предложение по внутреннему random_init. Это обрабатывает оба случая выбора повторяемости между вызовами и различиями над изображениями (coarray).

2
ответ дан francescalus 17 August 2018 в 12:24
поделиться
  • 1
    Ссылка на документацию gcc также должна быть обновлена, она должна указывать на более старую версию, как я здесь stackoverflow.com/a/18773059/721644 – Vladimir F 2 February 2018 в 19:20
  • 2
    Хороший момент, спасибо. Я предполагал, что я сделал это правильно в то время, но похоже, что я этого не делал. – francescalus 2 February 2018 в 19:30
Другие вопросы по тегам:

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