PI = Sub(4 /(2*n)+1)(n = 0,1,2,3......)
a:
public class Test02 {
public static void main(String[] args) {
System.out.println("# TermsCalculated Pi");
double Pi = 0.0, flag = 1.0;
for(int i = 0; i < 12; i++){
Pi += flag*4.0/(2.0*i+1);
flag = -flag;//改变下次所加分数的符号
System.out.printf("%d %.10f\n",(i+1),Pi);
}
}
}
执行结果为:
b:
public class Test02 {
public static void main(String[] args) {
System.out.println("# Terms Calculated Pi Error(%)");
double Pi = 0.0, flag = 1.0;
for(int i = 0; i < 1000000; i++){
Pi += flag*4.0/(2.0*i+1);
if((i+1)%50000 == 0){
System.out.printf("%d %.10f %.6f",(i+1)/50000,Pi,Math.abs((Math.PI-Pi)/Math.PI*100.0));
System.out.println("%");
}
flag = -flag;//改变下次所加分数的符号
}
}
}
执行结果为:
c
public static double calcPi(int num, double[] str){
double Pi = 0.0, flag = 1.0;
for(int i = 0; i < num; i++){
Pi += flag*4.0/(2.0*i+1);
if((i+1)%50000 == 0){
str[(i+1)/50000-1] = Pi;
}
flag = -flag;//改变下次所加分数的符号
}
return num;
}
d
public class Test02 {
public static double calcPi(int num, double[] str){
double Pi = 0.0, flag = 1.0;
for(int i = 0; i < num; i++){
Pi += flag*4.0/(2.0*i+1);
if((i+1)%50000 == 0){
str[(i+1)/50000-1]= Pi;
}
flag = -flag;//改变下次所加分数的符号
}
return num;
}
public static void main(String[] args) {
System.out.println("# Terms Calculated Pi Error(%)");
double [] PP =new double[20];//用一个数组来存储需要打印的Pi的值
calcPi(1000000, PP);//调用calcPi方法
for(int i = 0; i < PP.length; i++){
System.out.printf("%d %.10f%.6f",(i+1),PP[i],Math.abs((Math.PI-PP[i])/Math.PI*100.0));
System.out.println("%");
}
}
}
计算结果为:
e
public class Test02 {
public static int calcTargetPercent(double accuracy){//0.10% = 0.001
double Pi = 0.0, flag = 1.0, i = 0;
while(true){
Pi += flag*4.0/(2*i+1);
flag = -flag;//改变下次所加分数的符号
if(Math.abs((Math.PI-Pi)/Math.PI*100.0) - accuracy < 0)
break;
i++;
}
return (int)i;
}
public static void main(String[] args){
int answer = calcTargetPercent(0.001);
System.out.print("精度为0.10%时,需要的数量为");
System.out.println(answer);
}
}
执行结果为:
f
public class Test02 {
public static void main(String[] args) {
double Pi = 0.0, flag = 1.0, i = 0.0, result;
while(true){
Pi += flag*4.0/(2.0*i+1);
flag = -flag;//改变下次所加分数的符号
i++;
if((int)(Pi*100000) == 314159){
result = i;//记录最终结果
break;
}
}
System.out.println((int)result);
}
}
执行结果为:
老师啊,老师,很久没敲代码了,这次写作业漏洞百出,犯了特别简单的错误,好悲伤,幸好最后全部改过来了,如上所示。