n=addu[j]+l;
l=floor(n/BASIC);
addu[j]=fmod(n,BASIC);
if (addu[j]<0){
addu[j]=addu[j]+BASIC;
addu[j-1]=addu[j-1]-1;
}
}
}
void main()
{
time_t bt,et;
clock_t start,end;
char sign;
char fname[21];
char USER_PATH[]="C:\\USER.DAT";
char dir[MAXDIR];
int current_disk;
int length;
FILE *fo;
unsigned long int size,size0,x,y;
unsigned int i,m,r,size_0;
double flu,nat;
clrscr();
printf(" The program calculate value of PI \n");
printf(" Copyright by XU Hou-jun 1999/06/30 \n\n\n");
size_max=farcoreleft()-528;
MAX=size_max/(2*sizeof(double))-1;
printf("input length of PI value (MAX=%lu): ",(MAX-2)*10+1 );
scanf("\n%lu",&size0);
x=(size0-1)/10;
y=(size0-1);
if (y==0) size=x+1;
else size=x+2;
if (size > MAX){
printf("Overflowed MAX !\n");
return;
}
if((addu=(double huge
*)farcalloc((size+1),sizeof(double)))==NULL){
perror("ERROR in farcalloc ADDU !");
exit(1);
}
if((flux=(double huge
*)farcalloc((size+1),sizeof(double)))==NULL){
perror("ERROR in farcalloc FLUX !");
exit(1);
}
current_disk=getdisk();
getcurdir(0,dir);
setdisk(2);
if(chdir("\\")){
perror("Error! chdir()");
exit(1);}
if(chdir(USER_PATH)){
if(mkdir(USER_PATH)){
perror("Error! Unable to create directory C:\USER.DAT");
exit(1);
}
if(chdir(USER_PATH)){
perror("Error! Unable to create directory C:\USER.DAT");}
}
printf("The current director is %s , ",USER_PATH);
printf("input DATA file name : ");
scanf("\n%s",fname);
length=strlen(fname);
for(i=0;i
fname[i]=toupper(fname[i]);}
if ((fo=fopen(fname,"w+"))==NULL){
printf("File %s\\%s not open !\n\n ",USER_PATH,fname);
return;
}
size_0=(unsigned int)size;
start=clock();
time(&bt);
printf("\n\n\n");
printf(" Bigen time is %s",ctime(&bt));
sign=1;
flu=FLUX1;
nat=NATU1;
count(size_0,sign,flu,nat);
time(&et);
printf(" Middle time is %s",ctime(&et));
printf(" 0.00-- %6.0f\ seconds and about
0.00--76.98%\n",difftime(et,bt));
sign=-1;
flu=FLUX2;
nat=NATU2;
count(size_0,sign,flu,nat);
end=clock();
time(&et);
fprintf(fo,"%1.0f\.",addu[0]);
for (i=1;i<=size_0-1;i++){
r=(i-1)%7;
if (r==6) fprintf(fo,"0.0f\n\ ",addu[i]);
else fprintf(fo,"0.0f\ ",addu[i]);
}
fprintf(fo,"\n");
fprintf(fo," %6lu\ bite PI , ",10*(size-1)+1);
if(size<=10000) fprintf(fo,"RUN time is : %4.3f\
seconds\n",(end-start)/CLK_TCK);
else fprintf(fo,"RUN time is : %8.0f\
seconds\n",difftime(et,bt));
fclose(fo);
printf(" End time is %s\n",ctime(&et));
printf(" %6lu\ bits PI , ",10*(size-1)+1);
if(size<=10000) printf("RUN time is : %4.3f\
seconds\n",(end-start)/CLK_TCK);
else printf("RUN time is: %8.0f\ seconds\n",difftime(et,bt));
printf("\n DATA file path and file name is :
%s\\%s\n",USER_PATH,fname);
setdisk(current_disk);
chdir(dir);
farfree(addu);
farfree(flux);
}