lgamma, lgammaf, lgammal

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
remainder(C99)
remquo(C99)
fma(C99)
fmax(C99)
fmin(C99)
fdim(C99)
nan
nanf
nanl
(C99)
(C99)
(C99)
指数函数
exp
exp2(C99)
expm1(C99)
log
log10
log1p(C99)
log2(C99)
幂函数
sqrt
cbrt(C99)
hypot(C99)
pow
三角及双曲函数
sinh
cosh
tanh
asinh(C99)
acosh(C99)
atanh(C99)
误差及伽马函数
erf(C99)
erfc(C99)
lgamma(C99)
tgamma(C99)
临近整数的浮点运算
ceil
floor
round
lround
llround
(C99)
(C99)
(C99)
trunc(C99)
nearbyint(C99)
rint
lrint
llrint
(C99)
(C99)
(C99)
浮点数操作函数
ldexp
scalbn
scalbln
(C99)
(C99)
ilogb(C99)
logb(C99)
分类
fpclassify(C99)
isfinite(C99)
isinf(C99)
isnan(C99)
isnormal(C99)
signbit(C99)
宏常量
 
定义于头文件 <math.h>
float       lgammaf( float arg );
(1) (C99 起)
double      lgamma( double arg );
(2) (C99 起)
long double lgammal( long double arg );
(3) (C99 起)
定义于头文件 <tgmath.h>
#define lgamma( arg )
(4) (C99 起)
1-3) 计算arg伽马函数的绝对值的自然对数。
4) 通用类型宏:若arg拥有long double类型,则调用lgammal。否则,若arg拥有整数类型或double类型,则调用lgamma。否则,调用lgammaf

目录

[编辑] 参数

arg - 浮点值

[编辑] 返回值

若无错误发生,则返回arg的伽马函数的自然对数,即log
e
|
0
targ-1
e-t dt|

若发生极点错误,则返回+HUGE_VAL+HUGE_VALF+HUGE_VALL

若发生因上溢的值域错误,则返回±HUGE_VAL±HUGE_VALF±HUGE_VALL

[编辑] 错误处理

错误按指定于math_errhandling的方式报告。

arg为零或负整数,则可能出现极点错误。

若实现支持IEEE浮点算术(IEC 60559),

  • 若参数是1,则返回+0
  • 若参数是2,则返回+0
  • 若参数是±0,则返回+∞并引发FE_DIVBYZERO
  • 若参数是负整数,则返回+∞并引发FE_DIVBYZERO
  • 若参数是±∞,则返回+∞。
  • 若参数是NaN,则返回NaN

[编辑] 注意

arg是自然数,则lgamma(arg)arg-1阶乘的自然对数。

lgamma的POSIX版本不是线程安全的:函数的每次执行将arg的伽马函数的符号存储于静态外部变量signgam。一些实现提供lgamma_r,它接收一个指向用户提供的signgam的存储区的指针作为第二参数,而且是线程安全的。

在许多实现中有一个名为gamma的非标准函数,但其定义不一致。例如gamma的glibc和4.2BSD版本执行lgamma,但gamma的4.4BSD版本执行tgamma

[编辑] 示例

#include <stdio.h>
#include <math.h>
#include <float.h>
#include <errno.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf("lgamma(10) = %f, log(9!)=%f\n", lgamma(10), log(2*3*4*5*6*7*8*9));
    double pi = acos(-1);
    printf("lgamma(0.5) = %f, log(sqrt(pi)) = %f\n", log(sqrt(pi)), lgamma(0.5));
    // 特殊值
    printf("lgamma(1) = %f\n", lgamma(1));
    printf("lgamma(+Inf) = %f\n", lgamma(INFINITY));
    // 错误处理
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("lgamma(0) = %f\n", lgamma(0));
    if(errno == ERANGE) perror("    errno == ERANGE");
    if(fetestexcept(FE_DIVBYZERO)) puts("    FE_DIVBYZERO raised");
}

可能的输出:

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

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.8.3 The lgamma functions (p: 250)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.5.3 The lgamma functions (p: 525)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.8.3 The lgamma functions (p: 231)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.5.3 The lgamma functions (p: 462)

[编辑] 参阅

(C99)
(C99)
(C99)
计算伽马函数
(函数) [edit]
lgammaC++文档

[编辑] 外部链接

Weisstein, Eric W. 《对数伽马函数》来自 MathWorld--A Wolfram Web Resource。