code 41013; real procedure POISSON(X, MU); value X, MU; real X, MU; begin integer IX; real procedure KSI(K, L); value K, L; real L; integer K; begin real U, U2, W; W:= SQRT(L); U:= 2 × (SQRT(K + 1) - W); U2:= U × U; KSI:= U + (U2 - 4) / 12 / W + (-U2 × U + 10 × U) / 72 / L + (21 × U2 × U2 - 371 × U2 - 52) / 6480 / L / W end; IX:= ENTIER(X); if IX < 0 then POISSON:= 0 else if MU ≤ 0 then POISSON:= STATAL3 ERROR(“POISSON”,2,MU) else if MU > 1000 then POISSON:= PHI(KSI(IX, MU)) else begin integer I, MODUS; real MODUSPROB, PROB, CUM; MODUS:= ENTIER(MU) + 1; if IX < MODUS then begin PROB:= CUM:= POISSONPROB(IX, MU); for I:= IX step -1 until 1 do begin PROB:= PROB × I / MU; CUM:= CUM + PROB end end else begin MODUSPROB:= PROB:= CUM:= POISSONPROB(MODUS, MU); for I:= MODUS step -1 until 1 do begin PROB:= PROB × I / MU; CUM:= CUM + PROB end; PROB:= MODUSPROB; for I:= MODUS + 1 step 1 until IX do begin PROB:= PROB × MU / I; CUM:= CUM + PROB end end; POISSON:= CUM end end POISSON; eop