create or replace procedure pi as
TYPE tint IS TABLE OF PLS_INTEGER;
s tint := tint();
r1 tint := tint();
r2 tint := tint();
r3 tint := tint();
r4 tint := tint();
d1 tint := tint();
d2 NUMBER;
d3 tint := tint();
d4 NUMBER;
N CONSTANT NUMBER :=7200;
M CONSTANT NUMBER :=10000;
B CONSTANT NUMBER :=10000;
L CONSTANT NUMBER :=4;
t number;
p number;
mp number;
tag number;
begin
s.EXTEND(trunc(M/L));
r1.EXTEND(N);
r2.EXTEND(N);
r3.EXTEND(N);
r4.EXTEND(N);
d1.EXTEND(N);
d3.EXTEND(N);
FOR I IN 1..N LOOP
r1(i):=0; r2(i):=0; r3(i):=0; r4(i):=0; d1(i):=0; d3(i):=0;
end loop;
mp:=trunc(M/L/20);
r1(1):=1; r1(2):=3; r3(1):=4;
FOR k IN 1..trunc(M/L)-1 LOOP
t:=r1(1)*B;
d1(1):=trunc(t/5);
r1(1):=mod(t,5);
t:=r3(1)*B;
d3(1):=trunc(t/239);
r3(1):=mod(t,239);
s(k):=d1(1)-d3(1);
tag:=0;
for i in 2..N-1 loop
t:=r1(i)*B+d1(i-1);
d1(i):=trunc(t/25);
r1(i):=mod(t,25);
t:=r2(i)*B+d1(i);
d2:=trunc(t/(2*i+1));
r2(i):=mod(t,(2*i+1));
t:=r3(i)*B+d3(i-1);
d3(i):=trunc(t/57121);
r3(i):=mod(t,57121);
t:=r4(i)*B+d3(i);
d4:=trunc(t/(2*i+1));
r4(i):=mod(t,(2*i+1));
if tag=1 then
s(k):=s(k)+(d2-d4);
tag:=0;
else
s(k):=s(k)+(d4-d2);
tag:=1;
end if;
end loop;
if p=mp then
p:=0;
else
p:=p+1;
end if;
end loop;
for i in REVERSEtrunc(M/L)..1 loop
while s(i)>=B loop
s(i-1):=s(i-1)+1;
s(i):=s(i)-B;
end loop;
while s(i)
int main(int argc, char* argv[])
{
int const N=7200;
int const M=10000;
int const B=10000;
int const L=4;
// Machin公式 计算pi到一万位
int s[M/L];
int r1[N]={0},r2[N]={0},d1[N]={0},d2;
int r3[N]={0},r4[N]={0},d3[N]={0},d4;
int i,k,t,p=0,mp=M/L/20;
r1[0]=1;
r1[1]=3;
r3[0]=4;
printf("正在计算,请等待\n____________________\n");
for(k=0;k");
p=0;
}
else
p++;
}
for(i=M/L-1;i>=0;i--)
{
while(s>=B)
{
s[i-1]++;
s-=B;
}
while(s复制代码
|