code 35061; real procedure GAMMA(X); value X; real X; begin real Y, S, F, G, ODD, EVEN; boolean INV; if X < .5 then begin Y:= X - ENTIER(X / 2) * 2; S:= 3.14159 26535 8979; if Y >= 1 then begin S:= - S; Y:= 2 - Y end; if Y >= .5 then Y:= 1 - Y; INV:= true; X:= 1 - X; F:= S / SIN(3.14159 26535 8979 * Y) end else INV:= false; if X > 22 then G:= EXP(LOG GAMMA(X)) else begin S:= 1; NEXT: if X > 1.5 then begin X:= X - 1; S:= S * X; goto NEXT end; G:= S / RECIP GAMMA(1 - X, ODD, EVEN) end; GAMMA:= if INV then F / G else G end GAMMA eop