Board logo

标题: [原创] 计算圆周率任意位 [打印本页]

作者: plp626     时间: 2009-2-22 21:15    标题: [原创] 计算圆周率任意位

直接双击:默认计算100位,
命令行下:第一个参数(正整数)为计算圆周率的位数

CODE:  [Copy to clipboard]
@echo off&title 计算圆周率 by plp626@cn-dos.net
setlocal enabledelayedexpansion
if not %1.==. (set c=%1) else set c=100
set/a c=(c*100/3)+70,cc=c/10
for /l %%a in (1 1 %cc%)do set/a f_%%a=2000
for /l %%a in (%c% -132 100)do (set/a n=%%a/10,m=2*n-1
   set/a "d=f_!n!*10000,f_!b!=d%%m,d=d/m,n-=1"
   for /l %%b in (!n! -1 1)do (set/a n=%%b,m=2*n-1
      set/a "d=d*n+f_!n!*10000,f_!n!=d%%m,d=d/m,n-=1"
   )
   set/a "an=e+d/10000,e=d%%10000"
   if !an! lss 1000 set an=000!an!
   set/p=!an:~-4!<nul
)
echo\&echo/&set/p=数学爱好者加我QQ:275928264,验证号:plp626


[ Last edited by plp626 on 2009-2-22 at 23:20 ]
作者: HAT     时间: 2009-2-22 22:01
能否介绍一下公式?
作者: plp626     时间: 2009-2-22 23:08
这个公式我也不知道叫什么

pi=2*1+2*1!/3!!+2*2!/5!!+2*3!/7!!+...+2*k!/(2*k+1)!!+...

感觉与反正弦函数的泰勒展开有关,我还没推导出来

-----------------------------------------------------------------------------------------------------
我是照着这个c程序,模仿出来的
CODE:  [Copy to clipboard]
long b,c=2800,d,e,f[2801],g;
int main(int argc,char* argv[])
{
   for(b=0;b        f[b] = 2;
   e=0;
   while(c > 0)
   {
     d=0;
     for(b=c;b>0;b--)
     {
         d*=b;
         d+=f[b]*10;
         f[b]=d%(b*2-1);
         d/=(b*2-1);
     }
     c-=1;
     printf("%d",(e+d/10)%10);
     e=d%10;
   }
   return 0;
}

作者: netbenton     时间: 2009-2-23 01:59
高,学习了,
收藏了慢慢研究。




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5