//圆周率 π = 4∑(k=0,..∞)(-1)^k/(2k+1)
//π = 3.14159265358979323846
public class yzq {
public static void main(String[] args) {
// TODO Auto-generated method
stub
int n=0
double a=0
for (n=0n<=10000000n++ )
{
a = a + 4*Math.pow(-1,n)/(2*n+1)
System.out.println("第 "+n+"
位
"+a)
}
System.out.println("最后一位
"+a)
}
}
//程序运行结果
//第10
次计算
3.232315809405594
//第100
次计算
3.1514934010709914
//第1000
次计算
3.1425916543395442
//第10,000
次计算
3.1416926435905346
//第100,000
次计算
3.1416026534897203
//第1000,000
次计算
3.1415936535887745
//第10,000,000次计算
3.1415927535897814
//第100,000,000次计算
3.141592643589326
//第999,999,990次计算
3.1415926545880506
//第999,999,991次计算
3.1415926525880504
//第999,999,992次计算
3.1415926545880506
//第999,999,993次计算
3.1415926525880504
//第999,999,994次计算
3.1415926545880506
//第999,999,995次计算
3.1415926525880504
//第999,999,996次计算
3.1415926545880506
//第999,999,997次计算
3.1415926525880504
//第999,999,998次计算
3.1415926545880506
//第999,999,999次计算
3.1415926525880504
//第1,000,000,000次计算
3.1415926545880506
你的求圆周率的Java程序中,for循环中if的退出循环的条件写反了,if(1.0/i>1.0E-6)应该改成if(1.0/i<1.0E-6)
完整的Java程序如下(改动的地方见注释)
package zuoye7
public class zuoye7{
public static void main(String[] args){
int i,sign=1
double item,pi=0
for(i=1i+=2){
item=sign*1.0/i
if(1.0/i<1.0E-6) //这里把>改成<
break
pi=pi+item
sign=-sign
}
pi=4*pi
System.out.printf("pi=%.6f\n",pi)
}
}
建议你这样试试看:
我们分析下题目,考虑一下容易忽略的地方 然后我们将公式转化为如下代码: package cn.com.baidu.zhidaoquestion.pipublic class StrivesForThePI {
public static void main(String[] args) {
System.out.println("jdk的API中提供的π = "+Math.PI)
//arctg()函数参数x
double x = 1
//验证 π/4 = arctg(1)
double qtrPI = strives(x)
//求π并输出
System.out.println("π = " + 4*qtrPI)
}
/**
* 求解函数
* @return double s
*/
public static double strives(double x){
int i = 1
double n = 1, d = 0.000001,s = 0,sTmp = 1
double errorRange = s>sTmp?s-sTmp:sTmp-s
while(errorRange > d){//误差控制,由s和sTemp的差决定误差 ,
//如果i=偶数 i = (-1)*i
if(i%2==0){
n = (-1)
}else{
n = 1
}
//保存中间值,计算误差使用
sTmp = s
//计算Arg
s = s + n*((double)x/(2*i-1))
//误差范围 排除第一项
if(i!=1){
errorRange = s>sTmp?s-sTmp:sTmp-s
}
i++
}
System.out.println("误差为:"+errorRange)
if(x==1){
System.out.println("π/4 = " + s)
}
return s
}
}
这样做的好处:思路清晰,注释明了
注意事项:这个并不是唯一的答案,还可以优化,欢迎大家自由讨论.
如有帮助,感谢你的采纳!