题目
Given that Pi can be estimated using the function 4 * (1 – 1/3 + 1/5 – 1/7 + …) with more terms giving greater accuracy, write a function that calculates Pi to an accuracy of 5 decimal places.
翻译:给定pi=4 * (1 – 1/3 + 1/5 – 1/7 + …)的计算公式,项越多越精确,写一个方法来计算得到精度为小数点后5位的值
本来是在看博客:20个有争议编程的观点(其实我都很赞同,除了第19条,我还是支持优秀的设计是需要合适设计模式的),突如其来出现了一个面试算法题,思考分析了下发现其实考验的是数学题,以下是我的分析求解过程
分析过程
圆周率从小学就开始背诵了,现在还是记得清清楚楚,π=3.141592657…,所以小数点后5位那就是3.14159。
求和
圆周率π的计算有很多中方式,此题已经给出了π的无穷级数,通过python实现其求和:
1 | def calculatePi(x): |
目标x的值
通过无穷级数累计就和即可得到pi,但pi是一个无理数,不可能有一个精确的值,计算只能无限逼近理想值,这题的关键就是小数位后5位精度,从判断这个精度如何达到的角度切入,推导后直接能算出精度截止到小数点后5位时x的目标值
得到x的目标值为200000,代入求和公式即可得到π的结果
1 | calculatePi(200000) |
推导过程学习是在python jupyter notebook中使用了下LaTeX语法,但hexo若要支持laTeX需要额外安装插件和配置。
1 | $$ |