RosettaCodeData/Task/Gamma-function/FreeBASIC/gamma-function.basic

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