tgamma, tgammaf, tgammal
Определено в заголовочном файле <math.h> |
||
|---|---|---|
float tgammaf( float arg ); |
(1) | (с C99) |
double tgamma( double arg ); |
(2) | (с C99) |
long double tgammal( long double arg ); |
(3) | (с C99) |
Определено в заголовочном файле <tgmath.h> |
||
#define tgamma( arg ) |
(4) | (с C99) |
arg.arg имеет тип long double, вызывается tgammal. В противном случае, если arg имеет целочисленный тип или тип double, вызывается tgamma. В противном случае, вызывается tgammaf.Параметры
| arg | - | значение с плавающей точкой |
Возвращаемое значение
Если ошибки не возникли, возвращается значение гамма-функции от arg, то есть \(\Gamma(\mathtt{arg}) = \displaystyle\int_0^\infty\!\! t^{\mathtt{arg}-1} e^{-t}\, dt\)∫∞0targ-1 e-t dt.
Если произошла ошибка в области определения, возвращается значение, определённое реализацией (NaN, если поддерживается).
Если произошла ошибка полюса, возвращается ±HUGE_VAL, ±HUGE_VALF, или ±HUGE_VALL.
Если произошла ошибка переполнения, возвращается ±HUGE_VAL, ±HUGE_VALF, или ±HUGE_VALL.
Если произошла ошибка подпорогового значения, возвращается корректное значение (после округления).
Обработка ошибок
Ошибки сообщаются согласно описанию в math_errhandling.
Если arg равно нулю или целому числу меньше нуля, может произойти ошибка полюса или ошибка области определения.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559):
- Если аргумент равен ±0, возвращается ±∞ и поднимается
FE_DIVBYZERO. - Если аргумент равен отрицательному целому числу, возвращается NaN и поднимается
FE_INVALID. - Если аргумент равен -∞, возвращается NaN и поднимается
FE_INVALID. - Если аргумент равен +∞, возвращается +∞.
- Если аргумент равен NaN, возвращается NaN.
Примечания
Если arg — натуральное число, tgamma(arg) — факториал arg - 1.
Многие реализации вычисляют точный факториал в целочисленной области, если аргумент — достаточно малое целое число.
Для типа double, совместимого с IEEE, переполнение происходит, если 0 < x < 1/DBL_MAX или если x > 171.7.
POSIX требует, чтобы при нулевом аргументе произошла ошибка полюса, а при отрицательном целом аргументе — ошибка области определения. Также указывается, что в будущем ошибки области определения для отрицательных целых аргументов могут быть заменены ошибками полюса (в этом случае возвращаемое значение в таких случаях изменится с NaN на ±∞).
Существует нестандартная функция под названием gamma в различных реализациях, но её определение не является согласованным. Например, glibc и 4.2BSD версия gamma выполняет lgamma, но 4.4BSD версия gamma выполняет 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("tgamma(10) = %f, 9!=%f\n", tgamma(10), 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9.0);
printf("tgamma(0.5) = %f, sqrt(pi) = %f\n", tgamma(0.5), sqrt(acos(-1)));
// special values
printf("tgamma(+Inf) = %f\n", tgamma(INFINITY));
// error handling
errno = 0; feclearexcept(FE_ALL_EXCEPT);
printf("tgamma(-1) = %f\n", tgamma(-1));
if (errno == ERANGE)
perror(" errno == ERANGE");
else
if (errno == EDOM) perror(" errno == EDOM");
if (fetestexcept(FE_DIVBYZERO))
puts(" FE_DIVBYZERO raised");
else if (fetestexcept(FE_INVALID))
puts(" FE_INVALID raised");
}Возможный вывод:
tgamma(10) = 362880.000000, 9!=362880.000000
tgamma(0.5) = 1.772454, sqrt(pi) = 1.772454
tgamma(+Inf) = inf
tgamma(-1) = nan
errno == EDOM: Numerical argument out of domain
FE_INVALID raisedСсылки
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.12.8.4 Функции tgamma (стр. 250)
- 7.25 Универсальные математические функции <tgmath.h> (стр. 373-375)
- F.10.5.4 Функции tgamma (стр. 525)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.12.8.4 Функции tgamma (стр. 231)
- 7.22 Универсальные математические функции <tgmath.h> (стр. 335-337)
- F.9.5.4 Функции tgamma (стр. 462)
См. также
|
(C99)(C99)(C99) |
вычисляет натуральный (по основанию e) логарифм гамма-функции (функция) |
C++ документация для tgamma |
|
Внешние ссылки
| Weisstein, Eric W. "Гамма-функция." Из 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/tgamma