code 35062; real procedure LOG GAMMA(X); value X; real X; if X > 13 then begin real R, X2; R:= 1; NEXT: if X <= 22 then begin R:= R / X; X:= X + 1; goto NEXT end; X2:= - 1 / (X * X); R:= LN(R); LOG GAMMA:= LN(X) * (X - .5) - X + R + .91893 85332 04672 + (((.59523 80952 38095"-3 * X2 + .79365 07936 50794"-3) * X2 + .27777 77777 77778"-2) * X2 + .83333 33333 33333"-1) / X end else begin real Y, F, U0, U1, U, Z; integer I; array B[1:18]; F:= 1; U0:= U1:= 0; B[ 1]:= -.07611 41616 704358; B[ 2]:= +.00843 23249 659328; B[ 3]:= -.00107 94937 263286; B[ 4]:= +.00014 90074 800369; B[ 5]:= -.00002 15123 998886; B[ 6]:= +.00000 31979 329861; B[ 7]:= -.00000 04851 693012; B[ 8]:= +.00000 00747 148782; B[ 9]:= -.00000 00116 382967; B[10]:= +.00000 00018 294004; B[11]:= -.00000 00002 896918; B[12]:= +.00000 00000 461570; B[13]:= -.00000 00000 073928; B[14]:= +.00000 00000 011894; B[15]:= -.00000 00000 001921; B[16]:= +.00000 00000 000311; B[17]:= -.00000 00000 000051; B[18]:= +.00000 00000 000008; if X < 1 then begin F:= 1 / X; X:= X + 1 end else NEXT: if X > 2 then begin X:= X - 1; F:= F * X; goto NEXT end; F:= LN(F); Y:= X + X - 3; Z:= Y + Y; for I:= 18 step - 1 until 1 do begin U:= U0; U0:= Z * U0 + B[I] - U1; U1:= U end; LOG GAMMA:= (U0 * Y + .49141 53930 29387 - U1) * (X - 1) * (X - 2) + F end LOG GAMMA eop