转载  4行代码计算圆周率,e,2的平方根,log(2) 收藏

   在 http://numbers.computation.free.fr/Constants 中看到几个特别的程序,仅仅3-4行代码,却可以将圆周率,e(自然对数的底),log(2), 2的平方根 计算到数千位。这里将他们贴出来,方便大家学习。

   说明,本文所有程序均来自: http://numbers.computation.free.fr/Constants/TinyPrograms/tinycodes.html

 

  1. //计算2400位圆周率 
  2. int a=10000,b,c=8400,d,e,f[8401],g;main(){
  3. for(;b-c;)f[b++]=a/5;
  4. for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
  5. for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}
  6. //计算800位圆周率 
  7. main(){int a=1e4,c=3e3,b=c,d=0,e=0,f[3000],g=1,h=0;
  8. for(;b;!--b?printf("%04d",e+d/a),e=d%a,h=b=c-=15:f[b]=
  9. (d=d/g*b+a*(h?f[b]:2e3))%(g=b*2-1));}
  10. //计算1000位圆周率: 
  11. long k=4e3,p,a[337],q,t=1e3;
  12. main(j){for(;a[j=q=0]+=2,--k;)
  13. for(p=1+2*k;j<337;q=a[j]*k+q%p*t,a[j++]=q/p)
  14. k!=j>2?:printf("%.3d",a[j-2]%t+q/p/t);}
  15. //计算 1000位 自然对数的底: 
  16. main(){int N=9009,n=N,a[9009],x;while(--n)a[n]=1+1/n;
  17. for(;N>9;printf("%d",x))
  18. for(n=N--;--n;a[n]=x%n,x=10*a[n-1]+x/n);}
  19. //计算2400位log(2) 
  20. main(){int a=1000,b=0,c=7973,d,f[7974],n=800,k;
  21. for(;b<c;f[b++]=5);
  22. for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
  23. for(d=0,k=c;--k;d/=b,d*=k)f[k]=(d+=f[k]*a)%(b=2*k+2);}
  24. //计算2400位log(2) 
  25. main(){int a=1000,b=0,c=2658,d=75,f[2659],n=800,k;
  26. for(;b<c;f[b++]=d,d=-d);
  27. for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
  28. for(d=0,k=c;--k;d/=b,d*=k)f[k]=(d+=f[k]*a)%(b=8*k+4);}
  29. //计算 2400位 sqrt(2) 
  30. main(){int a=1000,b=0,c=1413,d,f[1414],n=800,k;
  31. for(;b<c;f[b++]=14);
  32. for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
  33. for(d=0,k=c;--k;d/=b,d*=2*k-1)f[k]=(d+=f[k]*a)%(b=100*k);}

发表于 @ 2008年11月05日 23:43:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:4行代码计算9999的阶乘 | 新一篇:自然数的物理化学性质

  • 发表评论
  • 评论内容:
  •  
Copyright © liangbch
Powered by CSDN Blog