code 35056; procedure BACKWARD(X,P,Q,I0,NMAX,EPS,I); value X,P,Q,I0,NMAX,EPS; integer NMAX; real X,P,Q,I0,EPS; array I; begin integer M,N,NU; real R,PQ,Y,LOGX; array IAPPROX[0:NMAX]; I[0]:= I0; if NMAX>0 then begin for N:= 1 step 1 until NMAX do IAPPROX[N]:= 0; PQ:= P+Q-1; LOGX:= LN(X); R:= NMAX+(LN(EPS)+Q*LN(NMAX))/LOGX; NU:= ENTIER(R-Q*LN(R)/LOGX); L1: N:= NU; R:= X; L2: Y:= (N+PQ)*X; R:= Y/(Y+(N+P)*(1-R)); if N<= NMAX then I[N]:= R; N:= N-1; if N >= 1 then goto L2; R:= I0; for N:= 1 step 1 until NMAX do R:= I[N]:= I[N]*R; for N:= 1 step 1 until NMAX do if ABS((I[N]-IAPPROX[N])/I[N]) > EPS then begin for M:= 1 step 1 until NMAX do IAPPROX[M]:= I[M]; NU:= NU+5; goto L1 end end end BACKWARD; eop