名稱空間
變體
操作

lgamma, lgammaf, lgammal

來自 cppreference.com
< c‎ | 數值‎ | 數學
 
 
 
常用數學函式
函式
基本操作
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大值/最小值操作
(C99)
(C99)
指數函式
(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)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮點數操作
(C99)(C99)
(C99)(C23)
(C99)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子與量子指數
十進位制重新編碼函式
總序和載荷函式
分類
(C99)
(C99)
(C99)
(C23)
誤差函式和伽馬函式
(C99)
(C99)
lgamma
(C99)
(C99)
型別
宏常量
特殊浮點值
(C99)(C23)
引數和返回值
錯誤處理
快速操作指示符
 
定義於標頭檔案 <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` 的伽馬函式對數值,即 loge|
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` 的非標準函式,但其定義不一致。例如,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("lgamma(10) = %f, log(9!) = %f\n", lgamma(10),
                                              log(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9));
    const double pi = acos(-1);
    printf("lgamma(0.5) = %f, log(sqrt(pi)) = %f\n", log(sqrt(pi)), lgamma(0.5));
    // special values
    printf("lgamma(1) = %f\n", lgamma(1));
    printf("lgamma(+Inf) = %f\n", lgamma(INFINITY));
 
    // error handling
    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

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 7.12.8.3 lgamma 函式 (p: TBD)
  • 7.25 型別通用數學 <tgmath.h> (p: TBD)
  • F.10.5.3 lgamma 函式 (p: TBD)
  • C17 標準 (ISO/IEC 9899:2018)
  • 7.12.8.3 lgamma 函式 (p: 182)
  • 7.25 型別通用數學 <tgmath.h> (p: 272-273)
  • F.10.5.3 lgamma 函式 (p: 383)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.12.8.3 lgamma 函式 (p: 250)
  • 7.25 型別通用數學 <tgmath.h> (p: 373-375)
  • F.10.5.3 lgamma 函式 (p: 525)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.12.8.3 lgamma 函式 (p: 231)
  • 7.22 型別通用數學 <tgmath.h> (p: 335-337)
  • F.9.5.3 lgamma 函式 (p: 462)

[編輯] 另請參閱

(C99)(C99)(C99)
計算伽馬函式
(函式) [編輯]
C++ 文件 for lgamma

[編輯] 外部連結

Weisstein, Eric W. "對數伽馬函式。" 來自 MathWorld — A Wolfram Web Resource。