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. 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, но её определение непоследовательно. Например, glibc и версия gamma из 4.2BSD выполняет lgamma, но версия gamma из 4.4BSD выполняет tgamma.
Пример
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <errno.h>
#include <fenv.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Справочные материалы
- Стандарт 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 |
|
Внешние ссылки
| Weisstein, Eric W. "Log Gamma Function." Из MathWorld — Wolfram Web Resource. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/lgamma