//在VC6.0下快速计算圆周率π的1万位
//若想算30万位请把下文中两处36000
//均扩大30倍即可。
#include<stdio.h>
#include<malloc.h>
long c=36000,f[36000],*p=f;
void main()
{ long a=100000,e=0,i,j;
for(i=0;i<c;i++)*p++=a/5;
for(p--;c>0;c-=18,p-=18)
{ unsigned long d=0;
i=c;j=c+c-1;
_asm mov eDI,p
loopi:
_asm mov eax,[eDI]
_asm mul Dword ptr a
_asm mov ecx,edx
_asm mov ebx,eax
_asm mov eax,d
_asm mul dword ptr i
_asm add eax,ebx
_asm adc edx,ecx
_asm div dword ptr j
_asm mov d,eax
_asm mov [eDI],edx
_asm sub eDI,04 // sizeof(long)
_asm dec dword ptr j
_asm dec dword ptr j
_asm dec dword ptr i
_asm jnz loopi
printf("%05ld",e+d/a);
e=d%a;
}
}