圆周率PI

算法设计

⑴选择计算公式

计算圆周率∏式很多,选取收敛速度快且容易操作的计算公式是设计的重要一环。

∏/2=1+1/3+(1•2)/(3•5)+(1•2•3)/(3•5•7)+⋯+(1•2•…n)/(3•5•…•(2n+1) )
=1+1/3(1+2/5(1+...(n-1)/(2n-1)(1+n/(2n+1))...)


⑵确定计算项数
可证明,式中分工第n项之后的所有余项之和Rn<an。因此,只要选取n,满足an<1/pow(10,x+1)即可。即只要使
lg 3 + lg 5/2 + ... + lg (2n+1)/n > x + 1
于是可设置对数累加实现计算到x位所需的项数n。为确保准确,算法可设置计算位数超过x位(例如x+5位),只打印输出x位。


⑶模拟乘除综合运算
设置a数组,下标根据计算位预设5000,必要时可增加。计算的整数值存放在a(0)中,小数点后第i位存放在a(i)(i=1,2,...)中。
依据公式,应用模拟乘除运算进行计算:
数组除以2n+1,乘以n,加上1;再除以2n-1,乘以n-1,加上1;……。这些数组操作设置在j(j=n,n-1,...,1)循环中实施。
按公式实施除法操作:被除数为c,除数d分别取2n+1,2n-1,...,3。商仍存取放在各数组元素(a(i)=c/d)中。余数(c%d)乘10加在后数组元素a(i+1)上,作为后一位的被除数。
按公式实施乘法操作:乘数j分别取n,n-1,...,i。乘积要注意进位,设进位数为b,则对计算的积a(i)=a(i)*j+b,取其十位以上数作为进位数b=a(i)/10,取其个数仍存放在原数组元素a(i)=a(i)%10中。
循环实施除乘操作完成后,按数组元素从高位到你们顺序输出。因计算位数较多,为方便查对,每一行控制打印50位,每10位空一格。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值