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