黑马程序员技术交流社区
标题:
求派,但是结果差异大
[打印本页]
作者:
王渠
时间:
2012-6-4 15:45
标题:
求派,但是结果差异大
本帖最后由 王渠 于 2012-6-4 15:51 编辑
public class Exercise5_14 {
public static void main(String[] args){
System.out.println("i\tm(i)");
for(int i =10;i<=100;i+=10)
System.out.println(i+"\t"+sum(i));
}
public static double sum(int n){
double sum = 0;
int temp = 1;
while(temp!=n){
sum += 1/(2*temp-1.0)-1/(2*temp+1.0);
temp++;
}
return 4 * sum;
}
}
复制代码
π = 4*(1-1/3+1/5-1/7+...+1/(2i-1)-1/(2i+1)
请问应该怎样修改代码,才可以得到精确的答案呢
作者:
闾丘日月
时间:
2012-6-4 16:28
lz你好好看你代码的逻辑
你的代码写出来就是这样的1-1/3+1/3-1/5+1/5....
每次temp自增两层次即可。这种求pi的问题没啥意思的,用java提供的常量就好了。
作者:
古银平
时间:
2012-6-4 16:53
public class Exercise5_14 {
public static void main(String[] args){
System.out.println("i\tm(i)");
for(int i =10;i<=100;i+=10)
System.out.println(i+"\t"+sum(i));
}
public static double sum(int n){
double sum = 0;
int temp = 1;
double a=1; //用于控制除数
while(temp!=n){
// sum += 1/(2*temp-1.0)-1/(2*temp+1.0);要实现 4*(1-1/3+1/5-1/7+...+1/(2i-1)-1/(2i+1)
//可以找规律temp是偶数时是加,奇数是减
if(temp%2!=0)
{
sum+=1/a;
}
else
{
sum-=1/a;
}
a+=2;
temp++;
}
return 4 * sum;
}
}
复制代码
D:\java>java Exercise5_14
i m(i)
10 3.2523659347188767
20 3.1941879092319425
30 3.1760651768684385
40 3.167229468186238
50 3.161998692995051
60 3.158540589307148
70 3.1560846463985
80 3.1542503744801236
90 3.1528282540763923
100 3.1516934060711166
作者:
张頔
时间:
2012-6-4 17:51
π的近似值
π=4-4/3+4/5-4/7+4/9-4/11……
代码如下:
public class Five {
public static void main(String[] args){
System.out.println("i\tm(i)");
for(int i =10;i<=100;i+=10)
System.out.println(i+"\t"+sum(i));
}
public static double sum(int n){
double sum = 4;
int temp = 1;
while(temp!=n){
sum +=4/(temp*4.0+1.0)-4.0/(temp*4.0-1.0);
temp++;
}
return sum;
}
}
结果如下:
i m(i)
10 3.1941879092319416
20 3.1672294681862376
30 3.1585405893071488
40 3.1542503744801254
50 3.1516934060711175
60 3.149995866593472
70 3.1487868051117247
80 3.1478818995749496
90 3.147179202180863
100 3.146617747495459
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2