table of contents
        
      
      
    | std::tgamma,std::tgammaf,std::tgammal(3) | C++ Standard Libary | std::tgamma,std::tgammaf,std::tgammal(3) | 
NAME¶
std::tgamma,std::tgammaf,std::tgammal - std::tgamma,std::tgammaf,std::tgammal
Synopsis¶
 Defined in header <cmath>
  
   float tgamma ( float arg ); (1) (since C++11)
  
   float tgammaf( float arg );
  
   double tgamma ( double arg ); (2) (since C++11)
  
   long double tgamma ( long double arg ); (3) (since C++11)
  
   long double tgammal( long double arg );
  
   double tgamma ( IntegralType arg ); (4) (since C++11)
  
   1-3) Computes the gamma function of arg.
  
   4) A set of overloads or a function template accepting an argument of any
    integral
  
   type. Equivalent to 2) (the argument is cast to double).
Parameters¶
arg - value of a floating-point or Integral type
Return value¶
 If no errors occur, the value of the gamma function of arg, that
    is
  
   \(\Gamma(\mathtt{arg}) = \displaystyle\int_0^\infty\!\! t^{\mathtt{arg}-1}
    e^{-t}\,
  
   dt\)∫∞
  
   0targ-1
  
   e^-t dt, is returned
  
   If a domain error occurs, an implementation-defined value (NaN where
    supported) is
  
   returned.
  
   If a pole error occurs, ±HUGE_VAL, ±HUGE_VALF, or
    ±HUGE_VALL is returned.
  
   If a range error due to overflow occurs, ±HUGE_VAL, ±HUGE_VALF,
    or ±HUGE_VALL is
  
   returned.
  
   If a range error due to underflow occurs, the correct value (after rounding)
    is
  
   returned.
Error handling¶
Errors are reported as specified in math_errhandling.
  
   If arg is zero or is an integer less than zero, a pole error or a domain
    error may
  
   occur.
  
   If the implementation supports IEEE floating-point arithmetic (IEC
  60559),
  
   * If the argument is ±0, ±∞ is returned and FE_DIVBYZERO
    is raised
  
   * If the argument is a negative integer, NaN is returned and FE_INVALID is
    raised
  
   * If the argument is -∞, NaN is returned and FE_INVALID is raised
  
   * If the argument is +∞, +∞ is returned.
  
   * If the argument is NaN, NaN is returned
Notes¶
 If arg is a natural number, std::tgamma(arg) is the factorial of
    arg-1. Many
  
   implementations calculate the exact integer-domain factorial if the argument
    is a
  
   sufficiently small integer.
  
   For IEEE-compatible type double, overflow happens if 0 < x < 1/DBL_MAX
    or if x >
  
   171.7
  
   POSIX requires that a pole error occurs if the argument is zero, but a domain
    error
  
   occurs when the argument is a negative integer. It also specifies that in
    future,
  
   domain errors may be replaced by pole errors for negative integer arguments
    (in
  
   which case the return value in those cases would change from NaN to
    ±∞).
  
   There is a non-standard function named gamma in various implementations, but
    its
  
   definition is inconsistent. For example, glibc and 4.2BSD version of gamma
    executes
  
   lgamma, but 4.4BSD version of gamma executes tgamma.
Example¶
// Run this code
  
   #include <iostream>
  
   #include <cmath>
  
   #include <cerrno>
  
   #include <cstring>
  
   #include <cfenv>
  
   #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";
  
   }
Possible output:¶
 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
See also¶
 lgamma
  
   lgammaf
  
   lgammal natural logarithm of the gamma function
  
   (C++11) (function)
  
   (C++11)
  
   (C++11)
  
   beta
  
   betaf
  
   betal beta function
  
   (C++17) (function)
  
   (C++17)
  
   (C++17)
External links¶
Weisstein, Eric W. "Gamma Function." From MathWorld--A Wolfram Web Resource.
| 2022.07.31 | http://cppreference.com |