code 35087; procedure NONEXPENX(X, N1, N2, A); value X, N1, N2; real X; integer N1, N2; array A; begin integer I, N; real W, AN; N:= if X<=1.5 then 1 else ENTIER(X+.5); if N<=10 then begin array B[N:N]; ENX(X, N, N, B); W:= B[N] * EXP(X) end else begin integer K, K1; real UE, VE, WE, WE1, UO, VO, WO, WO1, R, S; UE:=1; VE:= WE:= 1/(X+N); WE1:=0; UO:=1; VO:= -N/(X * (X + N + 1)); WO1:= 1/X; WO:= VO + WO1; W:= (WE + WO)/2; K1:=1; for K:=K1 while WO-WE>"-15 * W & WE>WE1 & WO<WO1 do begin WE1:= WE; WO1:=WO; R:= N+K; S:= R + X + K; UE:= 1/(1-K*(R-1)*UE/((S-2)*S)); UO:= 1/(1-K* R *UO/( S * S-1)); VE:= VE * (UE-1); VO:= VO * (UO-1); WE:= WE + VE; WO:= WO + VO; W:= (WE + WO)/2; K1:= K1 + 1 end end; AN:=W; if N<=N2 & N>=N1 then A[N]:=W; for I:= N-1 step -1 until N1 do begin W:= (1 - I * W)/X; if I<= N2 then A[I]:=W end; W:=AN; for I:= N+1 step 1 until N2 do begin W:= (1 - X * W)/(I - 1); if I>=N1 then A[I]:=W end end EXPENX; eop