普通のlgamma関数は、ガンマ関数の絶対値の対数を返しますが、
符号は外部整数 signgamに返ります。
符号の返る外部整数 extern int signgam を用い、Γ(x)の符号を次のように得ます。
extern int signgam;
y = lgamma(x);
int main(int argc, char *argv[])
{
double x,y;
extern int signgam;/*ここに±1が返ります。*/
if (argc == 2) x = atof (argv[1]);
else return 0;
y = lgamma(x);/*ガンマ関数の絶対値の対数*/
printf("gamma(x)=%g\n", (double)signgam * exp(y));
return 0;
}
[foo@localhost work]$ ./test_gamma 5
gamma(x)=24
と実行できます。