lgamma()、lgammaf()、lgammal() - 対数ガンマ関数

標準

標準/拡張機能 C/C++ 依存項目

XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3
C++ TR1 C99

両方  

形式

#define _XOPEN_SOURCE
#include <math.h>

double lgamma(double x);
extern int signgam;
int *__signgam(void);
C99:
#define _ISOC99_SOURCE
#include <math.h>

double lgamma(double x);
float lgammaf(float x);
long double lgammal(long double x);
C++ TR1 C99:
#define _TR1_C99
#include <math.h>

float lgamma(float x); 
long double lgamma(long double x);

機能説明

lgamma() 関数は、以下の計算を行います。
関数の公式
ここで、
公式の説明
という式は、次のように定義されます。
公式の説明
公式の説明

の符号は、外部整数 signgam に戻されます。引数 x は正の整数でなければなりません。

マルチスレッド化プロセスでは、各スレッドは signgam 変数の独自のインスタンスを持っています。スレッドは __signgam() 関数を呼び出すことにより、変数のインスタンスに アクセスします。__signgam() - signgam 参照の戻り を参照してください。math.h ヘッダー (math.hを参照) は、ストリング __signham 関数の呼び出しに「signgam」を再定義します。実 signgam 外部変数は、IPT 用の signgam 値を保管するために使用されます。
注: 下表は、これらの関数の実行可能な形式を示しています。 IEEE 2 進数浮動小数点の詳細は、IEEE 2 進数浮動小数点を参照してください。
関数 Hex IEEE
lgamma X X
lgammaf X X
lgammal X X

戻り値

正常に実行された場合、lgamma() はその引数の上記の関数を戻します。

lgamma() は次の条件下では失敗します。
  • 結果がオーバーフローの場合、関数は HUGE_VAL を戻し、errno を ERANGE に設定します。
  • x が正でない整数であり、_XOPEN_SOURCE が定義されている場合、lgamma() は HUGE_VAL を戻し、errno を EDOM に設定します。
  • x が正でない整数であり、_ISOC99_SOURCE が定義されている場合、lgamma() は HUGE_VAL を戻し、errno を ERANGE に設定します。
注: _XOPEN_SOURCE と _ISOC99_SOURCE の両方が定義されている場合は、_ISOC99_SOURCE の動作が優先されます。

IEEE の特殊な動作: _XOPEN_SOURCE が定義されていて、_ISOC99_SOURCE は定義されていない場合でも、lgamma() は HUGE_VAL を戻し、errno に ERANGE を設定します。

/*
   This example uses lgamma() to calculate ln(|G(x)|), where x = 42.
 */
#include <math.h>
#include <stdio.h>

int main(void)
{
   double x=42, g_at_x;

   g_at_x = exp(lgamma(x));       /* g_at_x = 3.345253e+49 */
   printf ("The value of G(%4.2f) is %7.2e¥n", x, g_at_x);
}
出力:
The value of G(42.00) is 3.35e+49

関連情報