[C] - 伽马函数计算(可求小数)

来源:http://zhidao.baidu.com/question/90734366.html

 

简单的说就是整数阶乘的推广,它有一个积分的表达式:
Γ(x)=∫e^(-t)*t^(x-1)dt (积分的下限式0,上限式+∞)
算法源自《常用算法程序集》徐士良

 
  
#include " stdio.h "

double Gamma(x)
double x;
{
int i;
double y,t,s,u;
static double a[ 11 ] = { 0.0000677106 , - 0.0003442342 , 0.0015397681 ,
- 0.0024467480 , 0.0109736958 , - 0.0002109075 ,
0.0742379071 , 0.0815782188 , 0.4118402518 ,
0.4227843370 , 1.0 };
if (x <= 0.0 )
{
printf(
" err**x<=0!\n " );
return ( - 1.0 );
}

y
= x;
if (y <= 1.0 )
{
t
= 1.0 / (y * (y + 1.0 ));
y
= y + 2.0 ;
}
else
if (y <= 2.0 )
{
t
= 1.0 / y;
y
= y + 1.0 ;
}
else
if (y <= 3.0 )
{
t
= 1.0 ;
}
else
{
t
= 1.0 ;
while (y > 3.0 )
{
y
= y - 1.0 ;
t
= t * y;
}
}
s
= a[ 0 ];
u
= y - 2.0 ;
for (i = 1 ; i <= 10 ; i ++ )
{
s
= s * u + a[i];
}
s
= s * t;
return (s);
}

double DecimalFactorial( double x)
{
return Gamma(x + 1 );
}

void main()
{
printf(
" %f\n " ,DecimalFactorial( 3.5 ));
}

 

 

求小数阶乘: 3.5!=Γ(x+1)=11.631730

转载于:https://www.cnblogs.com/hcbin/archive/2010/04/26/1721099.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值