Программа выдает псевдослучайные числа, равномерно
распределенные на интервале (0,1), не включая
конечные точки.
Предлагается 2 различных
генератора последовательности случайных чисел.
Выбор генератора задается при обращении к функции.
Структура:
Тип: |
- |
FUNCTION |
Имена входа для пользователя: |
- |
D_RANDOM, RANDOMINITIATE |
Обращение:
X=D_Random(N), где:
N |
- |
1,2 - номер генератора (INTEGER); |
X |
- |
(REAL*8) случайное число в диапазоне (0,1); |
RandomInitiate(i,k) - инициализация генератора целыми числами i,k.
N=1
Этот генератор случайных чисел впервые опубликован в статье:
G.Marsaglia and A. Zaman,
Toward a Universal Random Number Generator,
Florida State University Report: FSU-SCRI-87-50 (1987).
Он имеет период 2^144. Полностью переносим (дает идентичную
последовательность результатов на всех машинах
с мантиссой не менее 48 бит в представлении с плавающей точкой).
Для получения одного случайного числа выполняется 5 операций
сложения с плавающей запятой и 3 операции сложения с целыми
числами.
Подпрограмма RandomInitiate(i,k) инициализирует генератор
двумя целыми числами i и k
( 0 <= i <= 31328, 0 <= k <= 30081).
Это позволяет получить около 900000000 различных серий
случайных чисел.
Инициализация по умолчанию: i=1802, k=9373.
RandomInitiate определяет только серию, числа серии
начинаются с начала.
Полное состояние этого генератора
содержится в COMMON-блоке:
COMMON /RanGen_Parameters/ istat(4),rstat(100)
real*8 rstat
D_Random(-999) выводит istat(1) и istat(2), соответствующие
значениям i и k текущей серии.
N = 2
Переносимый генератор случайных чисел, описанный в статье:
P.L'Ecuyer, Efficient and Portable Random Number Generators,
Comm. ACM 31:743 (1988) 742.
Подпрограмма RandomInitiate(i,k) инициализирует генератор
двумя целыми числами i > 0 и k > 0.
Инициализация по умолчанию: i=1802, k=9373.
Эти два числа полностью определяют состояние генератора.
D_Random(-999) выдает значения i и k.
Пример:
. . .
implicit real*8 (a-h,o-z)
. . .
do i=1,5
write(*,'(2f18.14)') D_Random(1),D_Random(2)
enddo
. . .
Результат:
.47444060942140 .85597053361232
.80073601515072 .38790535493994
.51635387886227 .14669151631475
.30258604127470 .19100434993394
.01901665275539 .71819570289829