mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

DRAND48(3C)                                         DRAND48(3C)

НАЗВАНИЕ 
        drand48, erand48, lrand48, nrand48,  mrand48,  jrand48,
        srand48, seed48, lcong48 - генерация равномерно распре-
        деленных псевдослучайных чисел

СИНТАКСИС 
        double drand48 ( )
        
        double erand48 (xsubi)
        unsigned short xsubi [3];
        
        long lrand48 ( )
        
        long nrand48 (xsubi)
        unsigned short xsubi [3];
        
        long mrand48 ( )
        
        long jrand48 (xsubi)
        unsigned short xsubi [3];
        
        void srand48 (seedval)
        long seedval;
        
        unsigned short *seed48 (seed16v)
        unsigned short seed16v [3];
        
        void lcong48 (param)
        unsigned short param [7];

ОПИСАНИЕ 
        Данное семейство функций порождает псевдослучайные чис-
        ла с использованием широко известного линейного конгру-
        энтного алгоритма и 48-битной целой арифметики.

        Функции drand48 и  erand48  возвращают  неотрицательные
        вещественные числа двойной точности, равномерно распре-
        деленные в интервале [0.0, 1.0).

        Функции lrand48 и  nrand48  возвращают  неотрицательные
        целые числа типа long, равномерно распределенные в  ин-
        тервале [0, 2^31).

        Функции mrand48 и jrand48  возвращают  целые  числа  со
        знаком, типа long, равномерно распределенные в интерва-
        ле [-2^31, 2^31).

        Функции srand48, seed48 и  lcong48  представляют  собой
        инициализирующие точки входа, обращение к которым долж-
        но предшествовать вызову какой-либо из функций drand48,
        lrand48, mrand48. (Хотя это и не рекомендуется,  в  том
        случае, когда функции drand48, lrand48,  mrand48  будут
        вызваны без предварительного обращения к инициализирую-
        щим точкам входа, подстановка постоянных начальных зна-
        чений, принимаемых по умолчанию, будет произведена  ав-
        томатически.) Функции erand48,  nrand48  и  jrand48  не
        требуют предварительного обращения  к  инициализирующим
        точкам входа.

        Все  программы  работают,  порождая  последовательность
        48-битных целых значений X [i] в соответствии с  линей-
        ной конгруэнтной формулой

             X [n+1] = (a * X [n] + c) mod m           n   0

        Параметр m = 2^48 и поэтому используется 48-битная  це-
        лая арифметика. Если не было предварительного обращения
        к lcong48, для коэффициента a и аддитивной константы  c
        будут приняты следующие значения:

             a = 0x5DEECE66D = 0273673163155
             c = 0xB = 013

        Первым этапом вычисления возвращаемого значения для лю-
        бой из  функций  drand48,  erand48,  lrand48,  nrand48,
        mrand48  или  jrand48 является генерация очередного 48 
        битного значения X[i]. Далее из  него  берутся  старшие
        биты в количестве, определяемом типом требуемого данно-
        го, которые и преобразуются в возвращаемое значение.

        Функции  drand48, lrand48 и mrand48 сохраняют последнее
        сгенерированное 48-битное значение X[i]  во  внутреннем
        буфере  -  вот  почему они должны быть инициализированы
        перед своим вызовом. Для функций же erand48, nrand48  и
        jrand48  вызывающая программа должна сама резервировать
        память под очередное значение  X[i],  передаваемое  при
        вызове  как аргумент. Эти функции инициализации не тре-
        буют; вызывающая программа должна просто поместить  же-
        лаемое начальное значение X[i] в массив из трех 16-бит-
        ных  слов  и передать тот как аргумент. Посредством ис-
        пользования  различных  аргументов   функции   erand48,
        nrand48  и  jrand48 позволяют различным модулям большой
        программы генерировать  несколько  независимых  потоков
        псевдослучайных  чисел; другими словами, последователь-
        ность чисел в каждом потоке не  зависит  от  того,  как
        часто  программа  вызывалась для генерации чисел других
        потоков.

        Инициализирующая функция srand48 устанавливает  старшие
        32  бита  значения X[i] равными 32-м битам своего аргу-
        мента. Независимо от значения старших бит,  младшие  16
        бит X[i] устанавливаются равными 0x330E.

        Инициализирующая  функция seed48 устанавливает значение
        всех 48 бит X[i] по значению  аргумента  -  массива  из
        трех 16-битных слов. Предыдущее значение X[i] копирует-
        ся  в  48-битный  внутренний буфер, используемый только
        функцией seed48. Возвращаемое функцией seed48  значение
        представляет собой указатель на этот буфер.  Возвращае-
        мый указатель в большинстве случаев игнорируется, одна-
        ко он может оказаться полезным при перезапуске програм-
        мы  с данной точки в будущем. Для этого, используя ука-
        затель, следует извлечь и сохранить последнее  значение
        X[i],  которое  затем,  при перезапуске, употребить для
        повторной инициализации с помощью seed48.

        Инициализирующая функция lcong48 дает пользователю воз-
        можность указать начальное значение X [i], значение ко-
        эффициента a и аддитивной константы c. В массиве, явля-
        ющемся ее аргументом, элементы param [0-2] определяют X
        [i], элементы param [3-5] - коэффициент a  и,  наконец,
        param [6] - 16-битную константу c. После вызова lcong48
        восстановить "стандартные" значения  коэффициента  a  и
        константы c, описанные выше, можно путем вызова  какой 
        либо из функций srand48 или seed48.

ПРИМЕЧАНИЯ 
        Исходный  текст данного семейства функций для мобильной
        версии может быть использован даже на  компьютерах,  не
        обладающих  арифметикой вещественных чисел. В такой си-
        туации функций drand48 и erand48 не существует; их  за-
        меняют следующие две функции:

        long irand48 (m)
        unsigned short m;
        
        long krand48 (xsubi, m)
        unsigned short xsubi [3], m;

        Функции irand48 и  krand48  возвращают  неотрицательные
        целые числа типа long, равномерно распределенные в  ин-
        тервале [0, m-1].

СМ. ТАКЖЕ 
        rand(3C).



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк