code 35086; procedure ENX(X, N1, N2, A); value X, N1, N2; real X; integer N1, N2; array A; if X<= 1.5 then begin real W, E; integer I; W:= -EI(-X); if N1=1 then A[1]:=W; if N2>1 then E:= EXP(-X); for I:=2 step 1 until N2 do begin W:= (E - X * W)/(I - 1); if I>= N1 then A[I]:=W end end else begin integer I, N; real W, E, AN; N:=ENTIER(X+.5); if N<=10 then begin real F, W1, T, H; real array P[2:19]; P[ 2]:=.37534261820491"-1; P[11]:=.135335283236613 ; P[ 3]:=.89306465560228"-2; P[12]:=.497870683678639"-1; P[ 4]:=.24233983686581"-2; P[13]:=.183156388887342"-1; P[ 5]:=.70576069342458"-3; P[14]:=.673794699908547"-2; P[ 6]:=.21480277819013"-3; P[15]:=.247875217666636"-2; P[ 7]:=.67375807781018"-4; P[16]:=.911881965554516"-3; P[ 8]:=.21600730159975"-4; P[17]:=.335462627902512"-3; P[ 9]:=.70411579854292"-5; P[18]:=.123409804086680"-3; P[10]:=.23253026570282"-5; P[19]:=.453999297624848"-4; F:= W:= P[N]; E:= P[N+9]; W1:= T:= 1; H:= X-N; for I:=N-1, I-1 while ABS(W1)>"-15 * W do begin F:= (E - I * F)/N; T:= -H * T / (N-I); W1:= T * F; W:= W + W1 end end else begin array B[N:N]; NONEXPENX(X, N, N, B); W:= B[N] * EXP(-X) end; if N1=N2 & N1=N then A[N]:=W else begin E:= EXP(-X); AN:=W; if N<=N2 & N>=N1 then A[N]:=W; for I:= N-1 step -1 until N1 do begin W:= (E - I * W)/X; if I<= N2 then A[I]:= W end; W:=AN; for I:=N+1 step 1 until N2 do begin W:= (E - X * W)/(I - 1); if I>=N1 then A[I]:=W end end end ENX eop