#include <math.h> double lgamma(double x);
float lgammaf(float x);
long double lgammal(long double x); double lgamma_r(double x, int *signp);
float lgammaf_r(float x, int *signp);
long double lgammal_r(long double x, int *signp);
Gamma(x) = integral from 0 to infinity of t^(x-1) e^-t dt
Она определена для всех действительных чисел, кроме неположительных целых. Для неположительных интеграл m получим
Gamma(m+1) = m!
и в общем случае для всех x:
Gamma(x+1) = x * Gamma(x)
Для x < 0.5 можно использовать упрощенный вариант рассчета:
Gamma(x) * Gamma(1-x) = PI/sin(PI*x)
Функция lgamma() возвращает натуральный логарифм для абсолютного значения гамма-функции. Знак гамма-функции возвращается во внешнем целом signgam, объявленном в <math.h>. Он равен 1 если гамма-функция положительно или равно нулю, и -1 если она отрицательна.
Так как использование постоянного расположения signgam не является безопасным для ветвей процессов, то функции lgamma_r() и т.п. были изменены; теперь они возвращают знак через параметр signp.
Для неположительных целых значений x, lgamma() возвращает HUGE_VAL, устанавливает errno в ERANGE и активирует исключение деления на ноль. (Аналогичным образом lgammaf() возвращает HUGE_VALF, а lgammal() возвращает HUGE_VALL.)
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |