首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 計算小數/負數階乘:Gamma 函數擴展實現

     編輯:程式設計綜合問答

數學原理

階乘 n! 僅定義於非負整數。Gamma 函數 是階乘在複數域的解析延拓:
Γ(z) = ∫₀^∞ t^{z-1} e^{-t} dt,滿足 Γ(n) = (n-1)! (正整數 n)。

C# 實現方案

  1. MathNet.Numerics (推薦):SpecialFunctions.Gamma(x),完整、高精度、支持複數。
    NuGet: Install-Package MathNet.Numerics
  2. 自行實現 Lanczos 近似:精度可控、無依賴,代碼約 30 行。
  3. System.Web.UI.DataVisualization.Charting.StatisticFormula.GammaFunction:內置但隱藏在 Chart 命名空間,不推薦生產用。

代碼示例


using MathNet.Numerics;

double factorial(double x) {
    if (x < 0 && x == (int)x) throw new ArgumentException("負整數無階乘 (Gamma 函數極點)");
    return SpecialFunctions.Gamma(x + 1); // Γ(x+1) = x!
}

// 用法
Console.WriteLine(factorial(0.5));  // √π/2 ≈ 0.886
Console.WriteLine(factorial(-0.5)); // √π ≈ 1.772
Console.WriteLine(factorial(5));    // 120

負整數處理

  • Gamma 函數在負整數處有極點 (趨向無窮),數學上無定義。
  • 代碼中檢測 x < 0 && x == (int)x 拋出異常或返回 double.NaN。

**引入 MathNet.Numerics 一行調用 Gamma 函數,專業、準確、免維護。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved