code 41025; real procedure RUNPROB(X, M, N); value X, M, N; real X, M, N; begin integer K; real P; Boolean EVEN; if M < 0 ∨ ENTIER(M) < M then STATAL3 ERROR(“RUNPROB”, 2, M) else if N < 0 ∨ ENTIER(N) < N then STATAL3 ERROR(“RUNPROB”, 3, N); if M > N then begin K:= N; N:= M; M:= K end; EVEN:= ENTIER(X / 2) × 2 = X; K:= if EVEN then X / 2 else (X + 1) / 2; RUNPROB := if N = 0 then 0 else if M = 0 then (if X = 1 then 1 else 0) else if X < 2 ∨ X > 2 × M + 1 ∨ ENTIER(X) < X then 0 else if EVEN then 2 × M × N × EXP(2 × (LOGGAMMA(M) + LOGGAMMA(N) - LOGGAMMA(K)) - LOGGAMMA(M - K + 1) - LOGGAMMA(N - K + 1) - LOGGAMMA(M + N + 1)) else (M + N - X + 1) × M × N / (K - 1) × EXP(2 × (LOGGAMMA(M) + LOGGAMMA(N) - LOGGAMMA(K - 1)) - LOGGAMMA(M + N + 1) - LOGGAMMA(M - K + 2) - LOGGAMMA(N - K + 2)) end RUNPROB; eop