#include <stdio.h>
#include <math.h>
void lcala(long *);
void lcalb(long *);
void ladd(long *,long *,long *);
void lsub(long *,long *,long *);
void ldiva(long *);
void ldivb(long *,long,long *);
void printresult(long *);
#define L 65536
#define L1 ((L/9)+1)
#define L2 (L1+1)
#define N1 (L/1.39794+1)
#define N2 (L/4.75679+1)
void main(void){
long k;
static long s[L2+2],sw[L2+2],sv[L2+2];
for(k=0;k<=L2;k++)
s[k]=sw[k]=sv[k]=0;
lcala(sw);
lcalb(sv);
lsub(sw,sv,s);
printresult(s);
}
void lcala(long d[]){
long k,w[L2+2],qw[L2+2];
for(k=0;k<=L2;k++)
w[k]=qw[k]=0;
w[0]=16*5;
for(k=1;k<=N1;k++){
ldiva(w);
ldivb(w,2*k-1,qw);
if((k%2)!=0)
ladd(d,qw,d);
else
lsub(d,qw,d);
}
}
void lcalb(long d[]){
long k,w[L2+2],qw[L2+2];
for(k=0;k<=L2;k++)
w[k]=qw[k]=0;
w[0]=4*239;
for(k=1;k<=N2;k++){
ldivb(w,57121,w);
ldivb(w,2*k-1,qw);
if((k%2)!=0)
ladd(d,qw,d);
else
lsub(d,qw,d);
}
}
void printresult(long c[])
{
long i,j,x=1;
static long p[L2*9+2];
for(i=1;i<=L2;i++){
for(j=8;j>=0;j--){
p[x]=c[i]/pow(10,j);
p[x]%=10;
x++;
}
}
printf("PI=%d.\n\n",c[0]);
for(i=1;i<=L;i++){
printf("%d",p[i]);
if(i%1000==0)
printf("\n\n");
else if(i%50==0)
printf("\n");
else if(i%10==0)
printf(" ");
}
printf("\n");
}
void ladd(long a[],long b[],long c[])
{
long i,cy=0;
for(i=L2;i>=0;i--){
c[i]=a[i]+b[i]+cy;
if(c[i]<1000000000)
cy=0;
else{
c[i]-=1000000000;
cy=1;
}
}
}
void lsub(long a[],long b[],long c[])
{
long i,brrw=0;
for(i=L2;i>=0;i--){
c[i]=a[i]-b[i]-brrw;
if(c[i]>=0)
brrw=0;
else{
c[i]+=1000000000;
brrw=1;
}
}
}
void ldiva(long a[])
{
long i,tr1=0,tr2=L2;double d,rem=0;
while(a[tr1]==0){
tr1++;
}
while(a[tr2]==0){
tr2--;
}
for(i=tr1;i<=tr2+1;i++){
d=a[i]+rem;
a[i]=d/25;
rem=(d-(double)a[i]*25)*1000000000;
}
}
void ldivb(long a[],long b,long c[])
{
long i,tr=0;double d,rem=0;
while(a[tr]==0){
c[tr]=0;
tr++;
}
for(i=tr;i<=L2;i++){
d=a[i]+rem;
c[i]=d/b;
rem=(d-(double)c[i]*b)*1000000000;
}
}
–ß‚é