名前空間
変種
操作

lgamma, lgammaf, lgammal

From cppreference.com
< c‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(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)
量子および量子指数
Decimal再エンコーディング関数
総順序およびペイロード関数
分類
(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 - floating-point value

[編集] 戻り値

エラーが発生しない場合、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) をサポートしている場合、

  • If the argument is 1, +0 is returned.
  • 引数が 2 の場合、+0 が返されます。
  • 引数が ±0 の場合、+∞ が返され、FE_DIVBYZERO が発生します。
  • 引数が負の整数の場合、+∞ が返され、FE_DIVBYZERO が発生します。
  • 引数が ±∞ の場合、+∞ が返されます。
  • 引数が NaN の場合、NaN が返されます。

[編集] 注記

arg が自然数の場合、lgamma(arg)arg - 1 の階乗の対数です。

POSIX 版の lgamma はスレッドセーフではありません。関数の各実行は、ガンマ関数の符号を静的外部変数 signgam に格納します。一部の実装では、lgamma_r が提供されており、これは singgam のためのユーザー提供ストレージへのポインタを 2 番目のパラメータとして受け取り、スレッドセーフです。

様々な実装に gamma という名前の非標準関数がありますが、その定義は一貫性がありません。例えば、glibc と 4.2BSD 版の gammalgamma を実行しますが、4.4BSD 版の gammatgamma を実行します。

[編集]

#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 The lgamma functions (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • F.10.5.3 The lgamma functions (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.12.8.3 The lgamma functions (p: 182)
  • 7.25 型総称数学関数 <tgmath.h> (p: 272-273)
  • F.10.5.3 The lgamma functions (p: 383)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.12.8.3 The lgamma functions (p: 250)
  • 7.25 型総称数学関数 <tgmath.h> (p: 373-375)
  • F.10.5.3 The lgamma functions (p: 525)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.12.8.3 The lgamma functions (p: 231)
  • 7.22 型総称数学関数 <tgmath.h> (p: 335-337)
  • F.9.5.3 The lgamma functions (p: 462)

[編集] 関連項目

(C99)(C99)(C99)
ガンマ関数を計算する
(関数) [編集]

[編集] 外部リンク

Weisstein, Eric W. "Log Gamma Function." MathWorld — A Wolfram Web Resource.
English 日本語 中文(简体) 中文(繁體)