code 41255;
real procedure MULNOMPROB(XVEC, N, K, PVEC);
value N,K; real N,K; array XVEC, PVEC;
begin real XL, PL, LNPR, EPS, PSUM;
integer J, XSUM;
if N > ENTIER(N) ∨ N < 1 then
STATAL3 ERROR(“MULNOMPROB”,2,N) else
if K > ENTIER(K) ∨ K < 2 then
STATAL3 ERROR(“MULNOMPROB”,3,K) else
begin PSUM := 0; XSUM := 0; EPS := 10-14;
for J := 1 step 1 until K do
begin PL := PVEC[J];
if PL < 0 then
STATAL3 ERROR(“MULNOMPROB”,4,PL) else
PSUM := PSUM + PL
end;
if ABS(PSUM-1) > EPS then
STATAL3 ERROR(“MULNOMPROB”,4,PSUM) else
begin for J := 1 step 1 until K do
begin XL := XVEC[J];
if XL > ENTIER(XL) ∨ XL < 0 then
begin MULNOMPROB := 0; goto OUT end;
XSUM := XSUM + XL;
end;
if XSUM 10= N then
begin MULNOMPROB := 0; goto OUT end else
begin LNPR := LOGGAMMA(N+1);
for J := 1 step 1 until K do
if PVEC[J] = 0 then
begin if XVEC[J] ≠ 0 then
begin MULNOMPROB := 0;
goto OUT
end
end else
LNPR := LNPR - LOGGAMMA(XVEC[J]+1) +
XVEC[J] × LN(PVEC[J]);
MULNOMPROB := EXP(LNPR);
end;
end;
end; OUT:
end MULNOMPROB;
eop