InverseGamma Function
Returns 1/Gamma(X) using a Series Expansion as defined in Abramowitz & Stegun.

Unit
QESBPCSMath

Declaration
Function InverseGamma(const X: Extended): Extended;

Description
Defined for all values of X.

Accuracy: Gives about 15 digits.

Parameters
Value to process.

Category
Arithmetic Routines for Floats

Implementation

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;


HTML generated by Time2HELP
http://www.time2help.com