EXTERNAL CLASS BIGNUM; BIGNUM BEGIN PROCEDURE CALCPI; BEGIN INTEGER I; TEXT Q, R, T, K, N, L; COMMENT ! q, r, t, k, n, l = 1, 0, 1, 1, 3, 3 ; Q :- COPY("1"); R :- COPY("0"); T :- COPY("1"); K :- COPY("1"); N :- COPY("3"); L :- COPY("3"); WHILE TRUE DO BEGIN COMMENT ! if 4*q+r-t < n*t ; IF TCMP(TSUB(TADD(TMUL("4",Q),R),T),TMUL(N,T)) < 0 THEN BEGIN TEXT NR; OUTTEXT(N); I := I + 1; IF I = 40 THEN BEGIN OUTIMAGE; I := 0; END; COMMENT ! nr = 10*(r-n*t) ! n = ((10*(3*q+r))//t)-10*n ! q *= 10 ! r = nr ; NR :- TMUL("10",TSUB(R,TMUL(N,T))); N :- TSUB(TDIV(TMUL("10",TADD(TMUL("3",Q),R)),T),TMUL("10",N)); Q :- TMUL("10",Q); R :- NR; END ELSE BEGIN TEXT NR, NN; COMMENT ! nr = (2*q+r)*l ! nn = (q*(7*k)+2+(r*l))//(t*l) ! q *= k ! t *= l ! l += 2 ! k += 1 ! n = nn ! r = nr ; NR :- TMUL(TADD(TMUL("2",Q),R),L); NN :- TDIV(TADD(TADD(TMUL(Q,TMUL("7",K)),"2"),TMUL(R,L)),TMUL(T,L)); Q :- TMUL(Q,K); T :- TMUL(T,L); L :- TADD(L,"2"); K :- TADD(K,"1"); N :- NN; R :- NR; END; END; END CALCPI; CALCPI; END.