Я имею в виду, если у меня есть начальное случайное значение в качестве seed
, то введите
usran(seed)
возвращает значение в (0,1), затем, как вызвать следующее значение
в текущей последовательности?
Как прокомментировали @francescalus и @Vladmir F, эта функция имеет побочный эффект . Из Википедии:
В информатике функция или выражение, как говорят, имеют сторону
эффект, если он изменяет какое-то состояние за пределами своей области или имеет
наблюдаемое взаимодействие с его вызывающими функциями или внешним миром
кроме того, возвращая значение. Например, конкретная функция может
изменить глобальную переменную или статическую переменную, изменить одну из ее
аргументы, вызвать исключение, записать данные на дисплей или в файл, прочитать
данные с клавиатуры или файла, или вызвать другие побочные эффекты
функции. При наличии побочных эффектов поведение программы может
зависеть от истории; то есть порядок оценки имеет значение.
Понимание и отладка функции с побочными эффектами требует
знание контекста и его возможных историй.
функция или выражение без побочных эффектов называется чистым.
В конкретном случае вашей функции, кроме возврата случайного числа, она изменяет значение своего аргумента с помощью ir=abs(mod(da*ir,db)+0.5d0)
. Поэтому каждый раз, когда вы вызываете его снова с той же переменной, что и аргумент, ir
будет передаваться с другим значением и, таким образом, будет генерироваться другое случайное число.
" Purity " процедур играет важную роль в контексте Фортрана, потому что возможность побочных эффектов не позволяет компилятору выполнить некоторые оптимизации кода. Подпрограмма все еще может считаться чистой, если ее единственным побочным эффектом является изменение определенных аргументов.
Но бывают случаи, когда по самой природе процедуры побочные эффекты невозможно избежать, а иногда даже желательны. Например, сбор случайных чисел, также выполняется ввод-вывод, остановка кода или настройка модуля.