命名空间
变体
操作

tgamma、tgammaf、tgammal

来自 cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
类型
(C99)(C99)    

(C99)(C99)    

函数
基本操作
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小操作
(C99)
(C23)    
指数函数
(C23)
(C99)
(C99)
(C23)
(C23)
(C99)
(C99)(C23)
(C23)
(C23)
幂函数
(C99)
(C23)
(C23)
(C99)
(C23)
(C23)
三角函数和双曲函数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
误差函数和伽马函数
(C99)
(C99)
(C99)
tgamma
(C99)
最接近整数的浮点运算
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点操作函数
(C99)(C99)
(C99)(C23)
(C99)
缩小操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子和量子指数函数
十进制重新编码函数
全序和有效载荷函数
分类
(C99)
(C99)
(C99)
(C23)
宏常量
特殊浮点值
(C99)(C23)
参数和返回值
(C99)(C99)(C99)(C99)(C99)    
错误处理
(C99)    

 
定义在头文件 <math.h>
float       tgammaf( float arg );
(1) (自 C99)
double      tgamma( double arg );
(2) (自 C99)
long double tgammal( long double arg );
(3) (自 C99)
定义在头文件 <tgmath.h>
#define tgamma( arg )
(4) (自 C99)
1-3) 计算 arg伽马函数
4) 类型通用宏:如果 arg 的类型为 long double,则调用 tgammal。否则,如果 arg 的类型为整数类型或 double,则调用 tgamma。否则,调用 tgammaf

内容

[编辑] 参数

arg - 浮点值

[编辑] 返回值

如果未发生错误,则返回 arg 的伽马函数值,即
0
targ-1
e-t dt

如果发生域错误,则返回实现定义的值(如果支持,则返回 NaN)。

如果发生极点错误,则返回 ±HUGE_VAL±HUGE_VALF±HUGE_VALL

如果发生由于溢出导致的范围错误,则返回 ±HUGE_VAL±HUGE_VALF±HUGE_VALL

如果发生由于下溢导致的范围错误,则返回正确的值(舍入后)。

[编辑] 错误处理

错误的报告方式如 math_errhandling 中所述。

如果 arg 为零或小于零的整数,则可能发生极点错误或域错误。

如果实现支持 IEEE 浮点运算(IEC 60559)

  • 如果参数为 ±0,则返回 ±∞,并引发 FE_DIVBYZERO
  • 如果参数为负整数,则返回 NaN,并引发 FE_INVALID
  • 如果参数为 -∞,则返回 NaN,并引发 FE_INVALID
  • 如果参数为 +∞,则返回 +∞。
  • 如果参数为 NaN,则返回 NaN。

[编辑] 注释

如果 arg 为自然数,则 tgamma(arg)arg - 1 的阶乘。如果参数为足够小的整数,许多实现会计算出精确的整数域阶乘。

对于 IEEE 兼容类型 double,如果 0 < x < 1/DBL_MAX 或如果 x > 171.7,则会发生溢出。

POSIX 要求 如果参数为零则发生极点错误,但如果参数为负整数则发生域错误。它还规定在未来,域错误可能会被极点错误替换为负整数参数(在这种情况下,这些情况下的返回值将从 NaN 更改为 ±∞)。

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

[编辑] 示例

#include <errno.h>
#include <fenv.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
 
int main(void)
{
    printf("tgamma(10) = %f, 9!=%f\n", tgamma(10), 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9.0);
    printf("tgamma(0.5) = %f, sqrt(pi) = %f\n", tgamma(0.5), sqrt(acos(-1)));
 
    // special values
    printf("tgamma(+Inf) = %f\n", tgamma(INFINITY));
 
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("tgamma(-1) = %f\n", tgamma(-1));
    if (errno == ERANGE)
        perror("    errno == ERANGE");
    else
        if (errno == EDOM)   perror("    errno == EDOM");
    if (fetestexcept(FE_DIVBYZERO))
        puts("    FE_DIVBYZERO raised");
    else if (fetestexcept(FE_INVALID))
        puts("    FE_INVALID raised");
}

可能的输出

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

[编辑] 参考文献

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.12.8.4 tgamma 函数 (p: 250)
  • 7.25 类型泛型数学 <tgmath.h> (p: 373-375)
  • F.10.5.4 tgamma 函数 (p: 525)
  • C17 标准 (ISO/IEC 9899:2018)
  • 7.12.8.4 tgamma 函数 (p: 250)
  • 7.25 类型泛型数学 <tgmath.h> (p: 373-375)
  • F.10.5.4 tgamma 函数 (p: 525)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.12.8.4 tgamma 函数 (p: 250)
  • 7.25 类型泛型数学 <tgmath.h> (p: 373-375)
  • F.10.5.4 tgamma 函数 (p: 525)
  • C99 标准 (ISO/IEC 9899:1999)
  • 7.12.8.4 tgamma 函数 (p: 231)
  • 7.22 类型泛型数学 <tgmath.h> (p: 335-337)
  • F.9.5.4 tgamma 函数 (p: 462)

[编辑] 另请参阅

(C99)(C99)(C99)
计算伽马函数的自然(以 *e* 为底)对数
(函数) [编辑]
C++ 文档 用于 tgamma

[编辑] 外部链接

魏斯泰因,埃里克·W. “伽马函数”。 来自 Wolfram Web 资源 MathWorld。