Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
42
Task/Pi/PL-I/pi.pli
Normal file
42
Task/Pi/PL-I/pi.pli
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/* Uses the algorithm of S. Rabinowicz and S. Wagon, "A Spigot Algorithm */
|
||||
/* for the Digits of Pi". */
|
||||
(subrg, fofl, size):
|
||||
Pi_Spigot: procedure options (main); /* 21 January 2012. */
|
||||
declare (n, len) fixed binary;
|
||||
|
||||
n = 1000;
|
||||
len = 10*n / 3;
|
||||
begin;
|
||||
declare ( i, j, k, q, nines, predigit ) fixed binary;
|
||||
declare x fixed binary (31);
|
||||
declare a(len) fixed binary (31);
|
||||
|
||||
a = 2; /* Start with 2s */
|
||||
nines, predigit = 0; /* First predigit is a 0 */
|
||||
do j = 1 to n;
|
||||
q = 0;
|
||||
do i = len to 1 by -1; /* Work backwards */
|
||||
x = 10*a(i) + q*i;
|
||||
a(i) = mod (x, (2*i-1));
|
||||
q = x / (2*i-1);
|
||||
end;
|
||||
a(1) = mod(q, 10); q = q / 10;
|
||||
if q = 9 then nines = nines + 1;
|
||||
else if q = 10 then
|
||||
do;
|
||||
put edit(predigit+1) (f(1));
|
||||
do k = 1 to nines;
|
||||
put edit ('0')(a(1)); /* zeros */
|
||||
end;
|
||||
predigit, nines = 0;
|
||||
end;
|
||||
else
|
||||
do;
|
||||
put edit(predigit) (f(1)); predigit = q;
|
||||
do k = 1 to nines; put edit ('9')(a(1)); end;
|
||||
nines = 0;
|
||||
end;
|
||||
end;
|
||||
put edit(predigit) (f(1));
|
||||
end; /* of begin block */
|
||||
end Pi_Spigot;
|
||||
Loading…
Add table
Add a link
Reference in a new issue