因为学习的原因需要计算浮点数的阶乘,通常说的阶乘都是相对于整数来说的。
通过搜索相关的资料,得知可以通过推广
Gamma公式到实数范围,得到求伽玛函数的一种数值解。代码如下:
Code
1 /// <summary>
2 /// 近似计算伽玛函数。
3 /// </summary>
4 /// <param name="xx">待计算阶乘的数</param>
5 /// <returns>计算结果</returns>
6 static double Gamma(double xx)
7 {
8 double x, y, tmp, ser;
9 double[] cof=new double[] {76.18009172947146,-86.50532032941677,24.01409824083091,-1.231739572450155,0.1208650973866179e-2,-0.5395239384953e-5};
10 int j;
11 x = xx;
12 y = x;
13 tmp = x + 5.5;
14 tmp -= (x + 0.5) * Math.Log(tmp);
15 ser = 1.000000000190015;
16 for (j = 0; j <= 5; j++)
17 {
18 ser += cof[j] / (++y);
19 }
20 return xx*Math.Exp((-tmp + Math.Log(2.5066282746310005 * ser / x)));
21
参考资料: