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