Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
49
Task/Pi/IS-BASIC/pi.basic
Normal file
49
Task/Pi/IS-BASIC/pi.basic
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
100 PROGRAM "PI.bas"
|
||||
110 LET N=100 ! Nuber of digits
|
||||
120 LET LN=INT(10*N/3)+16
|
||||
130 DIM A(LN)
|
||||
140 LET PD,N9=0:LET ND=1
|
||||
150 FOR J=1 TO LN
|
||||
160 LET A(J-1)=2
|
||||
170 NEXT
|
||||
180 FOR J=1 TO N
|
||||
190 LET Q=0
|
||||
200 FOR I=LN TO 1 STEP-1
|
||||
210 LET X=10*A(I-1)+Q*I
|
||||
220 LET A(I-1)=X-(2*I-1)*INT(X/(2*I-1))
|
||||
230 LET Q=INT(X/(2*I-1))
|
||||
240 NEXT
|
||||
250 LET A(0)=Q-10*INT(Q/10)
|
||||
260 LET Q=INT(Q/10)
|
||||
270 SELECT CASE Q
|
||||
280 CASE 9
|
||||
290 LET N9=N9+1
|
||||
300 CASE 10
|
||||
310 LET D=PD+1:CALL WRITE
|
||||
320 IF N9>0 THEN
|
||||
330 FOR K=1 TO N9
|
||||
340 LET D=0:CALL WRITE
|
||||
350 NEXT
|
||||
360 END IF
|
||||
370 LET PD,N9=0
|
||||
380 CASE ELSE
|
||||
390 LET D=PD:CALL WRITE
|
||||
400 LET PD=Q
|
||||
410 IF N9<>0 THEN
|
||||
420 FOR K=1 TO N9
|
||||
430 LET D=9:CALL WRITE
|
||||
440 NEXT
|
||||
450 LET N9=0
|
||||
460 END IF
|
||||
470 END SELECT
|
||||
480 NEXT
|
||||
490 PRINT STR$(PD)(1)
|
||||
500 END
|
||||
510 DEF WRITE
|
||||
520 IF ND=0 THEN
|
||||
530 PRINT STR$(D)(1);
|
||||
540 ELSE IF D<>0 THEN
|
||||
550 PRINT STR$(D)(1);".";
|
||||
560 LET ND=0
|
||||
570 END IF
|
||||
580 END DEF
|
||||
50
Task/Pi/MiniScript/pi.mini
Normal file
50
Task/Pi/MiniScript/pi.mini
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
digits = input("Enter number of digits to calculate after decimal point: ").val
|
||||
// I've seen variations of this "precision" calculation from
|
||||
// 10 * digits
|
||||
// to
|
||||
// floor(10 * digits / 3) + 16
|
||||
// A larger value provides a more precise calculation but also
|
||||
// takes longer to run. Based on my testing, this calculation
|
||||
// below for precision produces accurate output for inputs
|
||||
// from 1 to 4000 - haven't tried larger than this.
|
||||
precision = floor(10 * digits / 3) + 4
|
||||
A = [2] * precision
|
||||
nines = 0
|
||||
predigit = 0
|
||||
cnt = 0
|
||||
while cnt <= digits
|
||||
carry = 0
|
||||
for i in range(precision - 1, 1, -1)
|
||||
temp = 10 * A[i] + carry * i
|
||||
A[i] = temp % (2 * i - 1)
|
||||
carry = floor(temp/(2 * i - 1))
|
||||
end for
|
||||
A[1] = carry % 10
|
||||
carry = floor(carry / 10)
|
||||
current = carry
|
||||
if current == 9 then
|
||||
nines += 1
|
||||
else if current == 10 then
|
||||
print (predigit+1), ""
|
||||
cnt += 1
|
||||
if nines > 0 then
|
||||
print "9" * nines, ""
|
||||
cnt += nines
|
||||
end if
|
||||
predigit = 0
|
||||
nines = 0
|
||||
else
|
||||
// the first digit produced is always a zero
|
||||
// don't need to see that
|
||||
if cnt != 0 then print predigit, ""
|
||||
cnt += 1
|
||||
predigit = current
|
||||
if nines > 0 then
|
||||
print "9" * nines, ""
|
||||
cnt += nines
|
||||
end if
|
||||
nines = 0
|
||||
end if
|
||||
if cnt == 2 then print ".", ""
|
||||
end while
|
||||
print str(predigit) * (cnt < digits + 2)
|
||||
Loading…
Add table
Add a link
Reference in a new issue