Namespaces
Variants

std:: tgamma, std:: tgammaf, std:: tgammal

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Определено в заголовке <cmath>
(1)
float tgamma ( float num ) ;

double tgamma ( double num ) ;

long double tgamma ( long double num ) ;
(до C++23)
/*floating-point-type*/
tgamma ( /*floating-point-type*/ num ) ;
(начиная с C++23)
(constexpr начиная с C++26)
float tgammaf ( float num ) ;
(2) (начиная с C++11)
(constexpr начиная с C++26)
long double tgammal ( long double num ) ;
(3) (начиная с C++11)
(constexpr начиная с C++26)
SIMD перегрузка (начиная с C++26)
Определено в заголовке <simd>
template < /*math-floating-point*/ V >

constexpr /*deduced-simd-t*/ < V >

tgamma ( const V & v_num ) ;
(S) (начиная с C++26)
Определено в заголовке <cmath>
template < class Integer >
double tgamma ( Integer num ) ;
(A) (constexpr начиная с C++26)
1-3) Вычисляет гамма-функцию от num . Библиотека предоставляет перегрузки std::tgamma для всех неквалифицированных cv типов с плавающей запятой в качестве типа параметра. (since C++23)
S) Перегрузка SIMD выполняет поэлементное вычисление std::tgamma для v_num .
(См. math-floating-point и deduced-simd-t для их определений.)
(since C++26)
A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые трактуются как double .
(since C++11)

Содержание

Параметры

num - значение с плавающей точкой или целочисленное значение

Возвращаемое значение

Если ошибок не возникает, возвращается значение гамма-функции от num , то есть
0
t num-1
e -t d t
.

Если происходит ошибка области определения, возвращается значение, определяемое реализацией (NaN, где поддерживается).

Если возникает ошибка полюса, ±HUGE_VAL , ±HUGE_VALF , или ±HUGE_VALL возвращается.

Если происходит ошибка диапазона из-за переполнения, ±HUGE_VAL , ±HUGE_VALF , или ±HUGE_VALL возвращается.

Если происходит ошибка диапазона из-за потери значимости (underflow), возвращается корректное значение (после округления).

Обработка ошибок

Ошибки сообщаются, как указано в math_errhandling .

Если num равен нулю или является целым числом меньше нуля, может возникнуть ошибка полюса или ошибка домена.

Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),

  • Если аргумент равен ±0, возвращается ±∞ и FE_DIVBYZERO устанавливается.
  • Если аргумент является отрицательным целым числом, возвращается NaN и FE_INVALID устанавливается.
  • Если аргумент равен -∞, возвращается NaN и FE_INVALID устанавливается.
  • Если аргумент равен +∞, возвращается +∞.
  • Если аргумент равен NaN, возвращается NaN.

Примечания

Если num является натуральным числом, std :: tgamma ( num ) является факториалом числа num - 1 . Многие реализации вычисляют точный факториал в целочисленной области, если аргумент является достаточно малым целым числом.

Для IEEE-совместимого типа double переполнение происходит, если 0 < num && num < 1 / DBL_MAX или если num > 171.7 .

POSIX требует возникновения ошибки полюса, если аргумент равен нулю, но ошибка области определения возникает, когда аргумент является отрицательным целым числом. Также указывается, что в будущем ошибки области определения могут быть заменены ошибками полюса для отрицательных целочисленных аргументов (в этом случае возвращаемое значение в этих случаях изменится с NaN на ±∞).

В различных реализациях существует нестандартная функция с именем gamma , но её определение непоследовательно. Например, версия gamma в glibc и 4.2BSD выполняет lgamma , тогда как версия gamma в 4.4BSD выполняет tgamma .

Дополнительные перегрузки не обязаны быть предоставлены в точности как (A) . Они лишь должны быть достаточными для обеспечения того, чтобы для их аргумента num целочисленного типа, std :: tgamma ( num ) имел тот же эффект, что и std :: tgamma ( static_cast < double > ( num ) ) .

Пример

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
int main()
{
    std::cout << "tgamma(10) = " << std::tgamma(10)
              << ", 9! = " << 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 << '\n'
              << "tgamma(0.5) = " << std::tgamma(0.5)
              << ", sqrt(pi) = " << std::sqrt(std::acos(-1)) << '\n';
    // special values
    std::cout << "tgamma(1) = " << std::tgamma(1) << '\n'
              << "tgamma(+Inf) = " << std::tgamma(INFINITY) << '\n';
    // error handling
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "tgamma(-1) = " << std::tgamma(-1) << '\n';
    if (errno == EDOM)
        std::cout << "    errno == EDOM: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
}

Возможный вывод:

tgamma(10) = 362880, 9! = 362880
tgamma(0.5) = 1.77245, sqrt(pi) = 1.77245
tgamma(1) = 1
tgamma(+Inf) = inf
tgamma(-1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised

Смотрите также

(C++11) (C++11) (C++11)
натуральный логарифм гамма-функции
(функция)
(C++17) (C++17) (C++17)
бета-функция
(функция)

Внешние ссылки

Вайсштейн, Эрик В. "Gamma Function." Из MathWorld — веб-ресурс Wolfram.