46 lines
1.1 KiB
Plaintext
46 lines
1.1 KiB
Plaintext
10 REM PI CALCULATION WITH SPIGOT
|
|
100 N=100: REM MAX N=260 TO AVOID OVERFLOW
|
|
110 LEN=(10*N)/3
|
|
120 J=0:K=0:Q=0:NINES=0:PREDIGIT=0
|
|
125 DIM A(LEN)
|
|
130 REM VARIABLES FOR THE SUB
|
|
140 RESULT=0:I=0:X=0
|
|
200 REM MAIN
|
|
210 FOR J=1 TO LEN:A(J)=2: NEXT J
|
|
220 REM START WITH 222...
|
|
230 NINES=0
|
|
240 PREDIGIT=0
|
|
250 REM FIRST PREDIGIT =0
|
|
260 FOR J=1 TO N
|
|
270 I=N-J: GOSUB 1000:Q=RESULT
|
|
275 A(1)=Q MOD 10
|
|
280 Q=Q/10
|
|
290 IF Q=9 THEN NINES=NINES+1
|
|
300 IF Q=10 THEN GOSUB 800
|
|
310 IF (Q<>9) AND (Q<>10) THEN GOSUB 900
|
|
320 NEXT J
|
|
330 PRINT PREDIGIT
|
|
340 END
|
|
800 PRINT PREDIGIT+1;
|
|
805 IF NINES=0 THEN GOTO 820
|
|
810 FOR K=1 TO NINES: PRINT 0;: NEXT K
|
|
820 PREDIGIT=0:NINES=0
|
|
830 RETURN
|
|
900 PRINT PREDIGIT;
|
|
910 PREDIGIT=Q
|
|
920 IF NINES<>0 THEN GOSUB 950
|
|
930 RETURN
|
|
950 FOR K=1 TO NINES: PRINT 9;: NEXT K
|
|
960 NINES=0
|
|
970 RETURN
|
|
1000 I=I*10/3+16
|
|
1010 IF I>LEN THEN I=LEN
|
|
1020 RESULT=0
|
|
1030 REM REPEAT
|
|
1040 X=10*A(I)+RESULT*I
|
|
1050 RESULT=X/(2*I-1)
|
|
1060 A(I)=X MOD (2*I-1)
|
|
1070 I=I-1
|
|
1080 IF I>0 THEN GOTO 1040
|
|
1090 RETURN
|