Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::lgamma,std::lgammaf,std::lgammal

      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       lgamma(float num);

      double      lgamma(double num);

      longdouble lgamma(longdouble num);
      (until C++23)
      /*floating-point-type*/
                  lgamma(/*floating-point-type*/ num);
      (since C++23)
      (constexpr since C++26)
      float       lgammaf(float num);
      (2)(since C++11)
      (constexpr since C++26)
      longdouble lgammal(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>

                  lgamma(const V& v_num);
      (S)(since C++26)
      Defined in header<cmath>
      template<class Integer>
      double      lgamma( Integer num);
      (A)(constexpr since C++26)
      1-3) Computes the natural logarithm of the absolute value of thegamma function ofnum. The library provides overloads ofstd::lgamma for all cv-unqualified floating-point types as the type of the parameter.(since C++23)
      S) The SIMD overload performs an element-wisestd::lgamma 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 logarithm of the gamma function ofnum, that is\(\log_{e}|{\int_0^\infty t^{num-1} e^{-t} \mathsf{d}t}|\)loge|
      0
      tnum-1
      e-t dt|
      , 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.

      [edit]Error handling

      Errors are reported as specified inmath_errhandling.

      Ifnum is zero or is an integer less than zero, a pole error may occur.

      If the implementation supports IEEE floating-point arithmetic (IEC 60559),

      • If the argument is 1, +0 is returned.
      • If the argument is 2, +0 is returned.
      • If the argument is ±0, +∞ is returned andFE_DIVBYZERO is raised.
      • If the argument is a negative integer, +∞ is returned andFE_DIVBYZERO is raised.
      • If the argument is ±∞, +∞ is returned.
      • If the argument is NaN, NaN is returned.

      [edit]Notes

      Ifnum is a natural number,std::lgamma(num) is the logarithm of the factorial ofnum-1.

      ThePOSIX version oflgamma is not thread-safe: each execution of the function stores the sign of the gamma function ofnum in the static external variablesigngam. Some implementations providelgamma_r, which takes a pointer to user-provided storage forsinggam as the second parameter, and is thread-safe.

      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::lgamma(num) has the same effect asstd::lgamma(static_cast<double>(num)).

      [edit]Example

      Run this code
      #include <cerrno>#include <cfenv>#include <cmath>#include <cstring>#include <iostream> // #pragma STDC FENV_ACCESS ON constdouble pi=std::acos(-1);// or std::numbers::pi since C++20 int main(){std::cout<<"lgamma(10) = "<< std::lgamma(10)<<", log(9!) = "<<std::log(std::tgamma(10))<<", exp(lgamma(10)) = "<<std::exp(std::lgamma(10))<<'\n'<<"lgamma(0.5) = "<< std::lgamma(0.5)<<", log(sqrt(pi)) = "<<std::log(std::sqrt(pi))<<'\n'; // special valuesstd::cout<<"lgamma(1) = "<< std::lgamma(1)<<'\n'<<"lgamma(+Inf) = "<< std::lgamma(INFINITY)<<'\n'; // error handlingerrno=0;std::feclearexcept(FE_ALL_EXCEPT); std::cout<<"lgamma(0) = "<< std::lgamma(0)<<'\n'; if(errno==ERANGE)std::cout<<"    errno == ERANGE: "<<std::strerror(errno)<<'\n';if(std::fetestexcept(FE_DIVBYZERO))std::cout<<"    FE_DIVBYZERO raised\n";}

      Output:

      lgamma(10) = 12.8018, log(9!) = 12.8018, exp(lgamma(10)) = 362880lgamma(0.5) = 0.572365, log(sqrt(pi)) = 0.572365lgamma(1) = 0lgamma(+Inf) = inflgamma(0) = inf    errno == ERANGE: Numerical result out of range    FE_DIVBYZERO raised

      [edit]See also

      (C++11)(C++11)(C++11)
      gamma function
      (function)[edit]
      C documentation forlgamma

      [edit]External links

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

      [8]ページ先頭

      ©2009-2025 Movatter.jp