| InverseGamma Function |
Unit
QESBPCSMath
Declaration
Function InverseGamma(const X: Extended): Extended;
Description
Defined for all values of X.
Accuracy: Gives about 15 digits.
| Parameters |
| X | Value to process. |
Category
Arithmetic Routines for FloatsImplementation
function InverseGamma (const X: Extended): Extended;
var
C: array [1..26] of Extended;
Z: Extended;
XF: Extended;
I: Integer;
begin
C [1] := 1;
C [2] := 0.5772156649015329;
C [3] := -0.6558780715202538;
C [4] := -0.0420026350340952;
C [5] := 0.1665386113822915;
C [6] := -0.0421977345555443;
C [7] := -0.0096219715278770;
C [8] := 0.0072189432466630;
C [9] := -0.0011651675918591;
C [10] := -0.0002152416741149;
C [11] := 0.0001280502823882;
C [12] := -0.0000201348547807;
C [13] := -0.0000012504934821;
C [14] := 0.0000011330272320;
C [15] := -0.0000002056338417;
C [16] := 0.0000000061160950;
C [17] := 0.0000000050020075;
C [18] := -0.0000000011812746;
C [19] := 0.0000000001043427;
C [20] := 0.0000000000077823;
C [21] := -0.0000000000036968;
C [22] := 0.0000000000005100;
C [23] := -0.0000000000000206;
C [24] := -0.0000000000000054;
C [25] := 0.0000000000000014;
C [26] := 0.0000000000000001;
Result := 0;
Z := 1;
XF := Frac (X);
if XF = 0 then
XF := ESBSign (X);
for I := 1 to 26 do
begin
Z := Z * XF;
Result := Result + C [I] * Z;
end;
if X > 0 then
begin
while XF < X do
begin
Result := Result / XF;
XF := XF + 1;
end;
end
else if X < 0 then
begin
while XF > X do
begin
XF := XF - 1;
Result := XF * Result;
end;
end
End; |
|
|