Текст подпрограммы и версий
sf39r_c.zip  sf39d_c.zip 
Тексты тестовых примеров
tsf39r_c.zip  tsf39d_c.zip 

Функция:  sf39r_c

Назначение

Вычисление гамма - функции распределения вероятностей  I (x, p).

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

sf39r_c вычисляет вероятность того, что случайная величина, подчиненная гамма - распределению с параметром  p, меньше или равна заданному значению  x.

Другими словами, sf39r_c вычисляет отношение  I(x, p)= Гx(p) / Г(p) =
             x                                                                                     
      =   ∫ e - t t p - 1 dt  /  ∫ e - t t p - 1 dt     ,
           0                        0   
   где    Гx (p) - неполная гамма - функция,  
            Г (p)  - гамма - функция (полная),
            x и p  - принимают вещественные значения, причем x ≥ 0 и p > 0.

M.Abramowitz, I.A.Stegun, Handbook of Mathematical Functions, New York, Dover Publications, INC., 1965.

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

    real sf39r_c (real *x, real *a, integer *ierr)

Параметры

x - заданное значение аргумента x (тип: вещественный);
p - заданное значение параметра p (тип: вещественный);
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы функции; при этом:
ierr=65 - когда значение аргумента x меньше 0; значение функции полагается равным 3.4e38;
ierr=66 - когда значение параметра p гамма - распределения меньше или pавно 0; значение функции полагается равным 3.4e38.

Версии

sf39d_c - вычисление гамма - функции распределения вероятностей  I (x, p) с повышенной точностью.

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

utsf12_c - подпрограмма выдачи диагностических сообщений при работе функции sf39r_c.
utsf13_c - подпрограмма выдачи диагностических сообщений при работе функции sf39d_c.

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

  Для функции sf39d_c параметры x и p должны иметь тип double и при ierr ≠ 0 значение sf39d_c полагается равным 1.74e308.

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

int main(void)
{
    /* Local variables */
    static int ierr;
    extern float sf39r_c(float *, float *, int *);
    static float a, r__, x;

    x = 1.f;
    a = 1.f;
    r__ = (float)sf39r_c(&x, &a, &ierr);

    printf("\n %16.7e %16.7e \n",x,a);
    printf("\n %16.7e %5i \n",r__,ierr);
    return 0;
} /* main */


Результаты:

       r__  =  0.632120558812
       ierr  =  0