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