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