π的高精度计算的算法
2020-09-07
来源:好走旅游网
文I化l教J育 科 高喜凤: 的高精度计算的算法 杨德彬 (1、哈尔滨工业大学华德应用技术学院基础教学部数学组,黑龙江哈尔滨150025 2、黑龙江商业职业学院,黑龙江牡丹江 157011) n 一 1二._摘要:主要介绍了圆周率叮r的高精度计算的算法,利用数学公式进行C++编程。计算盯的数学公式很多,这里采用的是高斯公式。对计算算 法进行详细的讲解,每一步在计算机中是怎样实现的,并把1T计算到小数点后10000位。 关键词:圆周率;高精度;算法;计算公式 在计算机编程中,不管是什么语言,算 法很重要。我认为学习算法是一个程序员想成 lor(i=0;i<n;i++) f ,最后所得的和越小,那么这个公式越 fgp Xi=X[i]+carry B; 为高手的必经之路。 “算法是灵魂”这句话我 有效精度越高。例如:E= + = q=x/d; 认为很是正确,而要想学好算法,数学基础就 carry=xi—q d; 必须要掌捱牢固。由于本人是数学专业的,所 1.852,通过计算 Y}i=q;l】iJ 以想从数学的角度谈谈算法。这里对 的高 HuttonI Hu恤m2 M,xllin Gauss 1 精度计算的算法做浅显的分析,有不足之处还 5.4堪 3280 1.852 1J86 J0 只涉及到除法,被除数是前边定义的 请专家指正批评。 代表的是圆周率,即圆的 大数组,x[0]为1,后面都为0,除数是x= 周长与直径之比。在大多数科学计算中,所用 从表格中可发现只有Gauss的测度最小, 18,carry代表进位,B代表基数10000。在计 的叮r值一般不超过1O位小数,如果用一个球 所以我选择了Gauss公式。经过观察这个公式 1 面把目前人类所探测到的宇宙空间包起来,再 分三个部分,包括三个arctan值,而arctan值 算arctan x的时候,由于x=音10 ,后面还有 计算该球面大圆的周长,为了使误差不超过一 的计算可以利用公式aretan x=x一 Xj+ 一 + 1 ,故计算起来很麻烦,所以可选用aretan 1u 个氢原子的直径,只需使用 的39位小数。 1 从古至今,人们始终都在追求计算出更精确的 …来计算,这里的x相当于亩,寺和 1=areeotp,这样计算P 比较容易一些。接下 P 叮r值的方法。尽管叮『值目前已计算出10亿多 位,但对叮r和 的计算研究依然没有终止。 素,这样整个计算中只包括加减乘除四则 来就是求和,求和的时候注意符号的问题,因 那么计算它的意义在哪里呢?简单的说高精度 为有正由负,在计算加法的时候,要注意是从 运算了,算法基本上都是一样的,这里只论述 后向前考虑,也就是从第2500位加起,看看 1r值的计算,至少具有以下几方面的意义: (1)检验计算机硬件和软件的性能。 第一部分arctan 1的算法。它的算法主要步 是否有进位。最后就是在主函数for循环中调 (2)关于 的小数位的随机分布性质的 骤是这样的: 用乘法函数,因为Gauss公式里a ̄ctan X前都 乘以相关的系数,12,8,一5,注意乘法和加 研究。 (1)定义一个大的整型数组,来存放每 (3)促进相关学科发展。 一步计算后的数值; 法一样,也是从后往前算,也涉及到进位问 (4)叮r值可用于密码编制。 (2)计算aretan值: 题。这样一个arctan x值就全部算完了,另外 两个算法过程与其类似,这里就不做论述了。 虽然计算 的本身没有什么太大的意义, a.利用的公式右边已经全部计算完毕,由 但是对于计算机编程爱好者来说,这无疑是一 计算寺,放人数组中; 个很有意思的挑战,其实在计算 的时候, b.计算 ,从而算出 ・ = , 于左边是 Tf,还要再做一步乘法,将整个结 需要用到一些有用的数学知识。这也是为什么 果乘以4。 要学好算法必须要掌握数学知识的原因。比如 依此类推; 以下这些数学公式都可以计算出 值,我们 c.每算完一步值后都加入到定义的数组 (3)结果的输出 列出的算法都是有关arctan x的级数展开。这 中; 接下来的任务就是输出1r的结果。 里提到的级数展开指的是将函数展开成X的幂 d.arctan值计算结束。 通过以上算法的实现,就可以算出圆周 (3)将arctan x乘以相应的系数, 率 小数点后10000位,总共用的时间是 。 (Hu 0ntt )1 71 =ararctactalnl I l 2 J + arctan I J12,8,一5; 3.72秒。这种算法并不复杂,只涉及到四种基 3 l (4)第一个arctan值计算结束,将三部 本运算,并且运算时间少,计算出的圆周率值 (Hutt0n 2)71 分数值相加减; 精确度也很高,本算法还可以进一步改善以缩 4 +arctan 【7 J (5) 值计算结束并输出结果。 短计算时间和提高计算精度。 (Machin) 7r 一 。 Il 239 Jl 下面对每一步算法进行详细论述。 (1)定义一个大的整型数组 (Gauss) 一 s一 s一 要想计算出高精度 ,首先得定义一个 大的数组,不妨有一个一维数组里面含有 X3 5 7 其中 。。 了 了 2500个元素,每个元素放四位数,这样就会 以上这些公式都可以计算出所要的数值, 得到小数点后10000位数,同时还要把数组内 但是每个公式计算的时间是不一样的,精度也 全部清零,以便以后存储相应的数据。 (由于 是不一样的,我选择的是Gauss公式,之所以 篇幅问题相关程序不做演示了) 选择它,是因为这个算法简单,无优化无技 (2)求正切值算法 巧,而且只需要进行整数运算。 它的语句是这样的: 现在来论述一下这个公式的算法。首先 long aretan=(1ong )maline(size sizeof 这里涉及到一个Lehmer的测度计算,通过计 (1ong)); void Div (1ong n,long X,long d, 算arctanf 1 1中的P的对数的倒数之和,即 long Y){ long ca ̄xy=0,x ,q,i; 一195一