Текст подпрограммы и версий gsi1r_c.zip |
Тексты тестовых примеров tgsi1r_c.zip |
Генерация одного псевдослучайного числа, имеющего биномиальное распределение.
Генерируется псевдослучайнoe чиcло R такое, что
P{R=K} = CNK pK (1 - p) (N-K) , K = 0, 1, ..., N , 0 ≤ p ≤ 1 ,
где N и p - параметры биномиального распределения.
Если N < 15, то число R получается как сумма N независимых псевдослучайных чисел, принимающих значения 1 и 0 с вероятностями p и (1 - p) соответственно.
Для N ≥ 15 используется нормальная аппроксимация биномиального распределения.
A.D.Relles, A simple algorithm for generating binomial random variables when N is large, Journal of the American Statistical Association, 339(67), 1972, 612-613.
real gsi1r_c (integer *iseed, integer *n, real *p)
Параметры
iseed - | целая переменная, значение которой перед обращением к подпрограмме может быть любым целым числом в пределах [1,2147483646]; по окончании работы ей присваивается новое значение, котоpое может быть использовано при последующем вхождении в подпрограмму; |
n - | параметр биномиального распределения (n ≥ 0) (тип: целый); |
p - | параметр биномиального распределения (0 ≤ p ≤ 1) (тип: вещественный). |
Версии : нет
Вызываемые подпрограммы
gsu2r_c - | генерация одного псевдослучайного числа, pавномеpно распределенного в интервале (0, 1) ; |
gsn2r_c - | генерация одного псевдослучайного числа, ноpмально распределенного с нулевым средним значением и единичной дисперсией; |
sf35r_c - | вычисление значений дополнительной функции ошибок (дополнительного интеграла вероятностей). |
Замечания по использованию : нет
int main(void) { /* Local variables */ extern float gsi1r_c(int *, int *, float *); static int i__, j, n; static float p, x[10]; static int iseed; iseed = 123456; n = 2; printf("\n gsi1r \n \n n = 2 \n"); for (j = 1; j <= 3; ++j) { p = .01f; for (i__ = 1; i__ <= 3; ++i__) { x[i__ - 1] = (float)gsi1r_c(&iseed, &n, &p); if (p <= .01f) { goto l2; } p = .7f; goto l1; l2: p = .1f; l1: ; } printf("\n p=0.01 x[0]= %16.7e \n p=0.1 x[1]= %16.7e \n", x[0],x[1]); printf(" p=0.7 x[2]= %16.7e \n",x[2]); if (n <= 2) { goto l3;} n = 30; printf("\n n = 30 \n"); goto l4; l3: n = 10; printf("\n n = 10 \n"); l4: ; } return 0; } /* main */ Результаты: r = 0.0