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 имеет тип longdouble, вызывается 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:
- Если аргумент равен ±0, возвращается ±∞ и возникает исключение
FE_DIVBYZERO. - Если аргумент является отрицательным целым числом, возвращается NaN и возникает исключение
FE_INVALID. - Если аргумент равен -∞, возвращается NaN и возникает исключение
FE_INVALID. - Если аргумент равен +∞, возвращается +∞.
- Если аргумент — NaN, возвращается NaN.
Примечания
Если arg является натуральным числом, tgamma(arg) — это факториал числа arg - 1. Многие реализации вычисляют точный факториал для целочисленного аргумента, если он достаточно мал.
Для совместимого с IEEE типа double переполнение происходит, если 0 < x < 1/DBL_MAX или если x > 171.7.
POSIX требует, чтобы при нулевом аргументе возникала ошибка полюса, а при отрицательном целом аргументе — ошибка области определения. Также в стандарте указано, что в будущем для отрицательных целых аргументов ошибки области определения могут быть заменены ошибками полюса (в этом случае возвращаемое значение изменится с NaN на ±∞).
В различных реализациях существует нестандартная функция с именем gamma, однако её определение не является единообразным. Например, версии glibc и 4.2BSD функции gamma выполняют lgamma, а версия 4.4BSD функции gamma выполняет 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("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
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.12.8.4 Функции tgamma (стр. 250)
- 7.25 Обобщённая математика для различных типов <tgmath.h> (стр. 373-375)
- F.10.5.4 Функции tgamma (стр. 525)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.12.8.4 Функции tgamma (стр. 250)
- 7.25 Обобщённая математика для различных типов <tgmath.h> (стр. 373-375)
- F.10.5.4 Функции tgamma (стр. 525)
- Стандарт 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 |
|
Внешние ссылки
| Вайсстайн, Эрик У. «Гамма-функция». Из MathWorld — веб-ресурса Wolfram. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/tgamma