lgamma, lgammaf, lgammal
Определено в заголовочном файле <math.h> | ||
|---|---|---|
float lgammaf( float arg ); | (1) | (начиная с C99) |
double lgamma( double arg ); | (2) | (начиная с C99) |
long double lgammal( long double arg ); | (3) | (начиная с C99) |
Определено в заголовочном файле <tgmath.h> | ||
#define lgamma( arg ) | (4) | (начиная с C99) |
arg имеет тип long double, вызывается lgammal. В противном случае, если arg имеет целочисленный тип или тип double, вызывается lgamma. Иначе вызывается lgammaf.Параметры
| arg | - | значение с плавающей точкой |
Возвращаемое значение
Если ошибки не возникают, возвращается значение логарифма гамма-функции от arg, то есть \(\log_{e}|{\int_0^\infty t^{arg-1} e^{-t} \mathsf{d}t}|\)loge|∫∞0targ-1 e-t dt|.
Если возникает ошибка полюса, возвращается +HUGE_VAL, +HUGE_VALF или +HUGE_VALL.
Если возникает ошибка диапазона из-за переполнения, возвращается ±HUGE_VAL, ±HUGE_VALF или ±HUGE_VALL.
Обработка ошибок
Об ошибках сообщается в соответствии с math_errhandling.
Если arg равно нулю или является отрицательным целым числом, может возникнуть ошибка полюса.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
- Если аргумент равен 1, возвращается +0.
- Если аргумент равен 2, возвращается +0.
- Если аргумент равен ±0, возвращается +∞ и возбуждается
FE_DIVBYZERO. - Если аргумент является отрицательным целым числом, возвращается +∞ и возбуждается
FE_DIVBYZERO. - Если аргумент равен ±∞, возвращается +∞.
- Если аргумент — NaN, возвращается NaN.
Примечания
Если arg — натуральное число, lgamma(arg) является логарифмом факториала числа arg - 1.
Версия lgamma из POSIX не является потокобезопасной: при каждом вызове функции знак гамма-функции от arg сохраняется в статической внешней переменной signgam. В некоторых реализациях предоставляется lgamma_r, которая принимает указатель на предоставленное пользователем хранилище для singgam в качестве второго параметра и является потокобезопасной.
В различных реализациях существует нестандартная функция с именем gamma, однако её определение различается. Например, версия gamma из glibc и 4.2BSD выполняет lgamma, тогда как версия gamma из 4.4BSD выполняет tgamma.
Пример
#include <errno.h>
#include <fenv.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
printf("lgamma(10) = %f, log(9!) = %f\n", lgamma(10),
log(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9));
const double pi = acos(-1);
printf("lgamma(0.5) = %f, log(sqrt(pi)) = %f\n", log(sqrt(pi)), lgamma(0.5));
// special values
printf("lgamma(1) = %f\n", lgamma(1));
printf("lgamma(+Inf) = %f\n", lgamma(INFINITY));
// error handling
errno = 0; feclearexcept(FE_ALL_EXCEPT);
printf("lgamma(0) = %f\n", lgamma(0));
if (errno == ERANGE)
perror(" errno == ERANGE");
if (fetestexcept(FE_DIVBYZERO))
puts(" FE_DIVBYZERO raised");
}
Возможный вывод:
lgamma(10) = 12.801827, log(9!) = 12.801827
lgamma(0.5) = 0.572365, log(sqrt(pi)) = 0.572365
lgamma(1) = 0.000000
lgamma(+Inf) = inf
lgamma(0) = inf
errno == ERANGE: Numerical result out of range
FE_DIVBYZERO raised
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.12.8.3 Функции lgamma (стр.: TBD)
- 7.25 Обобщённая математика для типов <tgmath.h> (стр.: TBD)
- F.10.5.3 Функции lgamma (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.12.8.3 Функции lgamma (стр.: 182)
- 7.25 Обобщённая математика для типов <tgmath.h> (стр.: 272-273)
- F.10.5.3 Функции lgamma (стр.: 383)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.12.8.3 Функции lgamma (стр.: 250)
- 7.25 Обобщённая математика для типов <tgmath.h> (стр.: 373-375)
- F.10.5.3 Функции lgamma (стр.: 525)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.12.8.3 Функции lgamma (стр.: 231)
- 7.22 Обобщённая математика для типов <tgmath.h> (стр.: 335-337)
- F.9.5.3 Функции lgamma (стр.: 462)
См. также
|
(C99)(C99)(C99) | вычисляет гамма-функцию (функция) |
Документация C++ для lgamma |
|
Внешние ссылки
| Вайсстайн, Эрик В. «Логарифмическая гамма-функция». Из MathWorld — веб-ресурса Wolfram. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/lgamma