D_RANDOM            Библиотека "JINRLIB"               V107      

    Автор: А.П.Сапожников
    Язык: Фортран

              СЕМЕЙСТВО  ГЕНЕРАТОРОВ  СЛУЧАЙНЫХ  ЧИСЕЛ

    Программа выдает псевдослучайные числа, равномерно
    распределенные на интервале (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.

    Пpимеp:
    -------
       . . .
       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