code 41023;
real procedure RUN(X, M, N);
value X, M, N; real X, M, N;
begin
real P, PCUM; integer IX, I, K, UP;
if M < 0 ∨ ENTIER(M) < M then
STATAL3 ERROR(“RUN”, 2, M) else
if N < 0 ∨ ENTIER(N) < N then
STATAL3 ERROR(“RUN”, 3, N) else
if M > N then begin K:= M; M:= N; N:= K end;
if M = 0 then RUN:= (if X < 1 then 0 else 1)
else if X < 2 then RUN:= 0 else
if M = N ∧ X ≥ M × 2 then RUN:= 1 else
if X > M × 2 then RUN:= 1 else
begin IX:= ENTIER(X); if IX ÷ 2 × 2 < IX then
begin PCUM:= P:= RUNPROB(IX, M, N);
K:= (IX - 1) / 2;
P:= P×K×2 / (M + N - K × 2); PCUM:= PCUM + P
end else
begin K:= IX / 2;
P:= PCUM:= RUNPROB(IX, M, N)
end;
for I:= K - 1 step -1 until 1 do
begin P:= P × (M + N - I × 2) × I / (N - I) /
(M - I) / 2; PCUM:= PCUM + P;
P:= P×2×I / (M + N - 2 × I); PCUM:= PCUM + P
end;
RUN:= PCUM
end
end RUN;
eop