Использование определенного начального значения в алгоритме `RANDOM_NUMBER`

#random #fortran #random-seed

#Случайный #fortran #случайный начальный

Вопрос:

Я хочу использовать определенный набор начальных значений для встроенной функции RANDOM_NUMBER (PRNG). До сих пор я читал, что начальное значение может быть установлено с помощью RANDOM_SEED вызова, в частности RANDOM_SEED(GET = array) . Мое замешательство заключается в том, как (если это возможно) установить конкретное значение для алгоритма, например, в RAND , RANDU или RANDM алгоритмах можно указать их собственное начальное значение напрямую. Я не уверен, как задать начальное значение, поскольку функция get, похоже, принимает массив. Если он принимает массив, всегда ли он извлекает начальное значение из определенного индекса в массиве? В принципе, есть ли способ установить конкретное начальное значение? Если да, сможет ли кто-нибудь записать это?

В качестве дополнительного примечания — я пытаюсь установить свое начальное значение, потому что, по словам моего профессора, один из других PRNG, о которых я упоминал, хорошо работает только с «большими нечетными числами», поэтому я решил, что я также могу контролировать это при сравнении PRNG.

Комментарии:

1. Используйте тег fortran для всех. Вопросы на Фортране. Вы можете добавить тег версии для вопросов, связанных с конкретной версией.

Ответ №1:

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

Во-вторых, вас вообще не должно волновать, содержит ли начальный массив 1, 4 или 42 целых числа, это не имеет значения, потому что PRNG использует биты из всего массива каким-то неуказанным пользовательским способом. Например, вы можете генерировать 64-разрядные вещественные числа, но начальный массив состоит из 32-разрядных целых чисел. Вы не можете просто сказать, какое целое число из начального массива что делает. Вы можете просмотреть весь начальный массив как одно большое целое число, которое при желании можно разрезать на более мелкие части.

Что касается совета вашего профессора, кто знает, что он имел в виду, но начальное значение, вероятно, задается какой-то процедурой этого конкретного генератора, а не стандартом RANDOM_SEED , поэтому вы должны прочитать документацию для этого генератора.

И как использовать конкретное начальное значение в RANDOM_SEED ? Это было описано на этом сайте несколько раз, просто выполните поиск RANDOM_SEED в правом верхнем поле поиска, на самом деле. Но это просто, как только вы узнаете размер массива, измените его на любые нетривиальные числа (вам нужно достаточно ненулевых битов), которые вы хотите и используете put= . На самом деле это все, просто не думайте об отдельных значениях в массиве, весь массив — это одна часть данных вместе взятых.