48 lines
1.1 KiB
Plaintext
48 lines
1.1 KiB
Plaintext
' FB 1.05.0 Win64
|
|
|
|
Const pi = 3.1415926535897932
|
|
Const e = 2.7182818284590452
|
|
|
|
Function gammaStirling (x As Double) As Double
|
|
Return Sqr(2.0 * pi / x) * ((x / e) ^ x)
|
|
End Function
|
|
|
|
Function gammaLanczos (x As Double) As Double
|
|
Dim p(0 To 8) As Double = _
|
|
{ _
|
|
0.99999999999980993, _
|
|
676.5203681218851, _
|
|
-1259.1392167224028, _
|
|
771.32342877765313, _
|
|
-176.61502916214059, _
|
|
12.507343278686905, _
|
|
-0.13857109526572012, _
|
|
9.9843695780195716e-6, _
|
|
1.5056327351493116e-7 _
|
|
}
|
|
|
|
Dim As Integer g = 7
|
|
If x < 0.5 Then Return pi / (Sin(pi * x) * gammaLanczos(1-x))
|
|
x -= 1
|
|
Dim a As Double = p(0)
|
|
Dim t As Double = x + g + 0.5
|
|
|
|
For i As Integer = 1 To 8
|
|
a += p(i) / (x + i)
|
|
Next
|
|
|
|
Return Sqr(2.0 * pi) * (t ^ (x + 0.5)) * Exp(-t) * a
|
|
End Function
|
|
|
|
Print " x", " Stirling",, " Lanczos"
|
|
Print
|
|
For i As Integer = 1 To 20
|
|
Dim As Double d = i / 10.0
|
|
Print Using "#.##"; d;
|
|
Print , Using "#.###############"; gammaStirling(d);
|
|
Print , Using "#.###############"; gammaLanczos(d)
|
|
Next
|
|
Print
|
|
Print "Press any key to quit"
|
|
Sleep
|