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