用Java计算圆周率

Python015

用Java计算圆周率,第1张

代码如下:

//圆周率 π = 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.pi

public 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

}

}

这样做的好处:思路清晰,注释明了

注意事项:这个并不是唯一的答案,还可以优化,欢迎大家自由讨论.

如有帮助,感谢你的采纳!