爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12679|回复: 6

[源代码] C#版本计算Gamma函数

[复制链接]

新浪微博达人勋

发表于 2015-5-20 16:54:50 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 清龙 于 2015-5-21 11:31 编辑

  1.     static class Calc
  2.     {
  3.         static public double NullD = 1e300;
  4.         static public double GammaFun(double x)
  5.         {
  6.             if (x == Math.Floor(x))
  7.             {
  8.                 if (x > 0)
  9.                 {
  10.                     int i = 1;
  11.                     for (int j = 2; j < x; j++)
  12.                         i *= j;
  13.                     return Convert.ToDouble(i);
  14.                 }
  15.             }
  16.             else
  17.             {
  18.                 double z = 0, r = 0, m = 0;
  19.                 if (Math.Abs(x) > 1)
  20.                 {
  21.                     z = Math.Abs(x);
  22.                     m = Math.Floor(x);
  23.                     r = 1.0;
  24.                     for (int k = 1; k <= m; k++)
  25.                         r = r * (z - k);
  26.                     z = z - m;
  27.                 }
  28.                 else
  29.                     z = x;

  30.                 double[] G = new double[26]{
  31. 1.0,0.5772156649015329,-0.6558780715202538,
  32. -0.420026350340952e-1,0.1665386113822915e0,-0.421977345555443e-1,
  33. -0.96219715278770e-2, 0.72189432466630e-2,
  34. -0.11651675918591e-2, -0.2152416741149e-3,
  35. 0.1280502823882e-3, -0.201348547807e-4,
  36. -0.12504934821e-5, 0.11330272320e-5,
  37. -0.2056338417e-6, 0.61160950e-8,
  38. 0.50020075e-8, -0.11812746e-8,
  39. 0.1043427e-9, 0.77823e-11,
  40. -0.36968e-11, 0.51e-12,
  41. -0.206e-13, -0.54e-14,
  42. 0.14e-14, 0.1e-15};
  43.                 double Gr = G[25];
  44.                 for (int k = 24; k >= 0; k--)
  45.                     Gr = Gr * z + G[k];
  46.                 double Ga = 1.0 / (Gr * z);
  47.                 if (Math.Abs(x) > 1.0)
  48.                 {
  49.                     Ga = Ga * r;
  50.                     if (x < 0)
  51.                         Ga = -1 * Math.PI / (x * Ga * Math.Sin(Math.PI * x));
  52.                 }
  53.                 return Ga;
  54.             }
  55.             return NullD;
  56.         }

  57.     }

直接调用Calc.GammaFun(x)就出来结果。用的是静态类的写法,像Math类一样 Calc.NullD 表示double类型的缺测数据





密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-20 17:47:15 | 显示全部楼层
感谢分享,学习。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-20 21:17:31 | 显示全部楼层
感谢楼主分享,学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-20 23:25:56 | 显示全部楼层
有附带简单说明吗  看别人编的纯代码真是件头大的事
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-21 06:39:34 来自手机 | 显示全部楼层
要加以说明或介绍
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-5-21 19:30:41 | 显示全部楼层
看看   来  下  额
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2021-6-5 18:22:57 | 显示全部楼层
时间久远,我都不记得我写了这个了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表