|
Текст подпрограммы и версий gsu1r_c.zip , gsu2r_c.zip |
Тексты тестовых примеров tgsu1r_c.zip , tgsu2r_c.zip |
Генерация массива псевдослучайных чисел, 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