前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧。
昨天师傅给我出了一道题,说是试试用java打印圆周率。
刚开始我的思路是,如果一个多边形的边数无限多,那么这个多边形就会无限靠近一个圆,那么用周长除以这个多边形的对角线就得到了圆周率的大概值,如果边数越多,那么得到的圆周率就越精确。
刚开始研究了老半天,最后一直找不到在边数增多的情况下,每条边的长度和对角线长度的对应关系。后来无奈,只有上网查了老祖宗祖冲之及其各个外国友人的祖宗的一系列方法,最后拿到这个这个数学公式pi/4=1/1-1/3+1/5-1/7+1/9-1/11...
最后决定用程序把他写出来,想法步骤如下:
1.想办法简化这个数学公式,容易让程序写出来,简化公式得到如下
pi/4=2/1*3+2/5*9+2/11*13.....
也就是当i为0 2 4 6 8
10的时候用(2*i+1)*(2*(i+1)+1)可以得到1*3,5*9,11*13这样的公式
等式右边,分子始终是固定的,2;分母则是奇数每两个相乘。
圆周率的四分之一则等于所有的分式相加的和,分数越多,结果则越靠近圆周率。
2.那么,程序代码步骤大概如下
1)定义加多少次分数乘以二。
2)定义分子。
3)因为pi是一个相加的结果,定义变量pi,并初始化为0.0
4)当i为0 2
4 6
8的时候,也就是i对2求余等于0的时候,把(2*i+1)*(2*(i+1)+1)赋值给分母
5)将pi加上分子除以分母的值赋值给pi,一直循环4
5,循环次数越多得到的pi的值越精确
6)因为得到的值是pi的四分之一,所以打印的时候,将结果乘以4就是我们算出来的圆周率的值。
附上代码:
java打印圆周率代码
最后发现一个问题,当分数累加和到达20000个之后,圆周率又开始不准确了,没有找到解决的办法。看看在以后的学习中是否找到更好的方法。