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