35 lines
790 B
Text
35 lines
790 B
Text
' Gamma function
|
|
|
|
Sub MainGamma()
|
|
Dim X As Double
|
|
For X = 0.1 To 2.05 Step 0.1
|
|
Debug.Print X, FNGamma(X)
|
|
Next X
|
|
End Sub
|
|
|
|
Function FNGamma(Z As Double) As Double
|
|
FNGamma = Exp(FNLnGamma(Z))
|
|
End Function
|
|
|
|
Function FNLnGamma(ByVal Z As Double) As Double
|
|
Dim LZ(6) As Double
|
|
LZ(0) = 1.00000000019001
|
|
LZ(1) = 76.1800917294715
|
|
LZ(2) = -86.5053203294168
|
|
LZ(3) = 24.0140982408309
|
|
LZ(4) = -1.23173957245015
|
|
LZ(5) = 1.2086509738662E-03
|
|
LZ(6) = -0.000005395239385
|
|
Pi = WorksheetFunction.Pi()
|
|
If Z < 0.5 Then
|
|
FNLnGamma = Log(Pi / Sin(Pi * Z)) - FNLnGamma(1# - Z)
|
|
Else
|
|
Z = Z - 1#
|
|
B = Z + 5.5
|
|
A = LZ(0)
|
|
For I = 1 To 6
|
|
A = A + LZ(I) / (Z + I)
|
|
Next I
|
|
FNLnGamma = (Log(Sqr(2 * Pi)) + Log(A) - B) + Log(B) * (Z + 0.5)
|
|
End If
|
|
End Function
|