下载此文档

圆周率π以及圆周率π的计算.doc


文档分类:建筑/环境 | 页数:约19页 举报非法文档有奖
1/19
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/19 下载此文档
文档列表 文档介绍
圆周率π以及圆周率π的计算为什么要算PI?计算机最原始的用途就是进行人类无法完成的复杂运算,算PI就是这样的运算之一。虽然算PI本身没有多大的实际意义,但是对于计算机爱好者来说作为一种编程的挑战,还是很有意思的。算PI看似简单,其实它还牵涉到一些有用的数学知识。第一类算法:arctan的级数展开PI/4=4arctan(1/5)-arctan(1/239)(1)arctan(x)=x-x3/3+x5/5-x7/7+....(2)很容易想到,要得到超高精度的PI值,实数在计算机中必须以数组的形式进行存取,数组的大小跟所需的有效位数成正比。在这个算法中,PI的有效位数n随(2)的求和项数线性增加。而为计算(2)中的每一项,需要进行超高精度实数除以小整数(52,2392,2k+1)的循环,循环所需次数也跟n成正比。所以,这个算法总的时间复杂度为O(n2)。这个算法的优点是简单,而且只需要进行整数运算。下面给出我写的算PI程序。在程序中,我采用了一些提高速度的措施:超高精度实数以数组的形式进行存取,数组元素的类型为64位整数(longlong),每个元素储存12个十进制位;对xk(x=1/5,1/239)的头部和尾部的0的数量进行估计,只对非0的部分进行计算。   回复人:swordd 回复时间:2005-12-314:32:00/*++源程序*/#plex>#;template<classT>plex<T>*array,intsize_log_2,boolpositive){    complex<T>swap;    for(inti=0;i<(1<<size_log_2);i++)    {        intreverse=0;        for(intj=0;j<size_log_2;j++)reverse^=(i&1<<j)>>j<<size_log_2-j-1;        if(reverse>i)        {            swap=array[reverse];            array[reverse]=array[i];            array[i]=swap;        }    }    complex<T>ca,cb;    for(ints=0;s<size_log_2;s++)    {        complex<T>w=plex<T>(0,(positive?-1:1)*PI/(1<<s)));        for(inta=0;a<(1<<size_log_2-s-1);a++)        {            complex<T>m=1;            for(intb=0;b<(1<<s);b++)            {                ca=array[a*(1<<s+1)+b];                cb=array[((a<<1)+1)*(1<<s)+b]*m;                array[a*(1<<s+1)+b]=ca+cb;                array[((a<<1)+1)*(1<<s)+b]=ca-cb;                m*=w;            }        }    }    if(!positive)for(intc=0;c<(1<<size_log_2);c++)array[c]/=(1<<size_log_2);}template<classT>plex<T>*array,intsize,boolpositive,intstep=1){    intN1,N2,m1,m2,k1,k2;    if(step==1)    {        intinter=size;        while(true)        {            if(inter%2==0)inter=inter/2;            elseif(inter%3==0)inter=inter/3;            elseif(inter%5==0)inter=inter/5;            elseif(inter%7==0)inter=inter/7;            elsebreak;        }        if(inter!=1)return-1;    }    if(size%2==0)N1=2;    elseif(size%3==0)N1=3;    elseif(size%

圆周率π以及圆周率π的计算 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数19
  • 收藏数0 收藏
  • 顶次数0
  • 上传人s1188831
  • 文件大小84 KB
  • 时间2019-12-29