Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

      From cppreference.com
      <cpp‎ |numeric‎ |math
       
       
       
      Common mathematical functions
      Nearest integer floating point operations
      (C++11)(C++11)(C++11)
      (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
       
      Defined in header<cmath>
      (1)
      float       tgamma(float num);

      double      tgamma(double num);

      longdouble tgamma(longdouble num);
      (until C++23)
      /*floating-point-type*/
                  tgamma(/*floating-point-type*/ num);
      (since C++23)
      (constexpr since C++26)
      float       tgammaf(float num);
      (2)(since C++11)
      (constexpr since C++26)
      longdouble tgammal(longdouble num);
      (3)(since C++11)
      (constexpr since C++26)
      SIMD overload(since C++26)
      Defined in header<simd>
      template</*math-floating-point*/ V>

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

                  tgamma(const V& v_num);
      (S)(since C++26)
      Defined in header<cmath>
      template<class Integer>
      double      tgamma( Integer num);
      (A)(constexpr since C++26)
      1-3) Computes thegamma function ofnum. The library provides overloads ofstd::tgamma for all cv-unqualified floating-point types as the type of the parameter.(since C++23)
      S) The SIMD overload performs an element-wisestd::tgamma onv_num.
      (Seemath-floating-point anddeduced-simd-t for their definitions.)
      (since C++26)
      A) Additional overloads are provided for all integer types, which are treated asdouble.
      (since C++11)

      Contents

      [edit]Parameters

      num - floating-point or integer value

      [edit]Return value

      If no errors occur, the value of the gamma function ofnum, that is\(\Gamma(\mathtt{num}) = \displaystyle\int_0^\infty\!\! t^{\mathtt{num}-1} e^{-t}\, dt\)
      0
      tnum-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.

      [edit]Error handling

      Errors are reported as specified inmath_errhandling.

      Ifnum 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 andFE_DIVBYZERO is raised.
      • If the argument is a negative integer, NaN is returned andFE_INVALID is raised.
      • If the argument is -∞, NaN is returned andFE_INVALID is raised.
      • If the argument is +∞, +∞ is returned.
      • If the argument is NaN, NaN is returned.

      [edit]Notes

      Ifnum is a natural number,std::tgamma(num) is the factorial ofnum-1. Many implementations calculate the exact integer-domain factorial if the argument is a sufficiently small integer.

      For IEEE-compatible typedouble, overflow happens if0< num&& num<1/DBL_MAX or ifnum>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 namedgamma in various implementations, but its definition is inconsistent. For example, glibc and 4.2BSD version ofgamma executeslgamma, but 4.4BSD version ofgamma executestgamma.

      The additional overloads are not required to be provided exactly as(A). They only need to be sufficient to ensure that for their argumentnum of integer type,std::tgamma(num) has the same effect asstd::tgamma(static_cast<double>(num)).

      [edit]Example

      Run this code
      #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 valuesstd::cout<<"tgamma(1) = "<< std::tgamma(1)<<'\n'<<"tgamma(+Inf) = "<< std::tgamma(INFINITY)<<'\n'; // error handlingerrno=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! = 362880tgamma(0.5) = 1.77245, sqrt(pi) = 1.77245tgamma(1) = 1tgamma(+Inf) = inftgamma(-1) = nan    errno == EDOM: Numerical argument out of domain    FE_INVALID raised

      [edit]See also

      (C++11)(C++11)(C++11)
      natural logarithm of the gamma function
      (function)[edit]
      (C++17)(C++17)(C++17)
      beta function
      (function)[edit]
      C documentation fortgamma

      [edit]External links

      Weisstein, Eric W. "Gamma Function." From MathWorld — A Wolfram Web Resource.
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/math/tgamma&oldid=160765"

      [8]ページ先頭

      ©2009-2025 Movatter.jp