Текст подпрограммы и версий
gsu1r_c.zip , gsu2r_c.zip
Тексты тестовых примеров
tgsu1r_c.zip , tgsu2r_c.zip

Подпрограмма:  gsu1r_c (версия gsu2r_c)

Назначение

Генерация массива псевдослучайных чисел, pавномеpно распределенных в интервале (0, 1).

Математическое описание

Псевдослучайные числа R (J) получаются по следующим рекуррентным формулам:

     K0  =  ISEED ,    где  ISEED - некотоpое целое начальное значение
                                                      из отрезка  [1, 2147483646] .
     KJ  =  7 5 * KJ-1  ( mod 231 - 1 ) ,    1 ≤ J ≤ N

     R(J)  =  KJ * 2-31 ,   1 ≤ J ≤ N
     ISEED  =  KN 

Д.Кнут, Искусство программирования для ЭВМ, т. 2, "Мир", M., 1977, стp. 22 - 51.

Использование

    int gsu1r_c (integer *iseed, integer *n, real *r__)

Параметры

iseed - целая переменная, значение которой перед обращением к подпрограмме может быть любым целым числом в пределах [1, 2147483646]; по окончании работы ее значение полагается равным (231) * r (n), и это значение может быть использовано при последующем вхождении в подпрограмму;
n - заданное количество генерируемых псевдослучайных чисел (тип: целый);
r - вещественный массив длины n, содержащий вычисленные псевдослучайные числа.

Версии

gsu2r_c - генерация одного псевдослучайного числа, pавномеpно распределенного в интервале (0, 1).

Вызываемые подпрограммы: нет

Замечания по использованию

  gsu2r_c является подпрограммой функцией и имеет заголовок
 
     real gsu2r_c (integer *iseed)

Пример использования

int main(void)
{
    /* Local variables */
    extern int gsu1r_c(int *, int *, float *);
    static int n;
    static float r__[3];
    static int iseed;

    iseed = 123457;
    n = 3;
    gsu1r_c(&iseed, &n, r__);

    printf("\n  %5i \n",iseed);
    printf("\n  %16.7e %16.7e %16.7e \n",r__[0],r__[1],r__[2]);
    return 0;
} /* main */


Результат:

       iseed  =  1645535613
       r(1)   =  0.966220069211
       r(2)   =  0.260710790753
       r(3)   =  0.766262231860