⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamma.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <math.h>#include <errno.h>/*	C program for floating point log gamma function	gamma(x) computes the log of the absolute	value of the gamma function.	The sign of the gamma function is returned in the	external quantity signgam.	The coefficients for expansion around zero	are #5243 from Hart & Cheney; for expansion	around infinity they are #5404.	Calls log and sin.*/int	signgam;static double goobie	= 0.9189385332046727417803297;static double pi	= 3.1415926535897932384626434;#define M 6#define N 8static double p1[] = {	0.83333333333333101837e-1,	-.277777777735865004e-2,	0.793650576493454e-3,	-.5951896861197e-3,	0.83645878922e-3,	-.1633436431e-2,};static double p2[] = {	-.42353689509744089647e5,	-.20886861789269887364e5,	-.87627102978521489560e4,	-.20085274013072791214e4,	-.43933044406002567613e3,	-.50108693752970953015e2,	-.67449507245925289918e1,	0.0,};static double q2[] = {	-.42353689509744090010e5,	-.29803853309256649932e4,	0.99403074150827709015e4,	-.15286072737795220248e4,	-.49902852662143904834e3,	0.18949823415702801641e3,	-.23081551524580124562e2,	0.10000000000000000000e1,};static doubleasym(double arg){	double n, argsq;	int i;	argsq = 1 / (arg*arg);	n = 0;	for(i=M-1; i>=0; i--)		n = n*argsq + p1[i];	return (arg-.5)*log(arg) - arg + goobie + n/arg;}static doublepos(double arg){	double n, d, s;	int i;	if(arg < 2)		return pos(arg+1)/arg;	if(arg > 3)		return (arg-1)*pos(arg-1);	s = arg - 2;	n = 0;	d = 0;	for(i=N-1; i>=0; i--){		n = n*s + p2[i];		d = d*s + q2[i];	}	return n/d;}static doubleneg(double arg){	double temp;	arg = -arg;	temp = sin(pi*arg);	if(temp == 0) {		errno = EDOM;		return HUGE_VAL;	}	if(temp < 0)		temp = -temp;	else		signgam = -1;	return -log(arg*pos(arg)*temp/pi);}doublegamma(double arg){	signgam = 1;	if(arg <= 0)		return neg(arg);	if(arg > 8)		return asym(arg);	return log(pos(arg));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -