黑马程序员技术交流社区
标题:
请教近似求π的问题
[打印本页]
作者:
doyxy
时间:
2014-1-3 00:04
标题:
请教近似求π的问题
本帖最后由 doyxy 于 2014-1-4 12:59 编辑
今天看了一下java语言程序设计基础篇(第八版),看到一个练习题,用4*(1-1/3+1/5-1/7+1/9-...)的方法求近似π值,
我的代码如下, 但只能设定x小于某个值,而题目要求似乎是求极限?如果x不设置条件,又会提示
Test1.java:17: 错误: 无法访问的语句
System.out.println("pi="+4*temp);
如果把上面的语句放到里循环里,程序会一直滚动显示pai值,但是不是越来越接近,而是一个大一个小
到底应该怎么做呢?
pi=3.1416871090538248
pi=3.1414982070467405
pi=3.1416870912135253
pi=3.1414982248836703
pi=3.1416870733799644
pi=3.141498242713864
class Test1
{
public static void main(String[] args)
{
double pi,a=0,b=0,temp=0;
int count=0;
for (int x=3;x<10000000;x+=2 )
{
count++;
if (count%2!=0)
a-=(1.0/x);
else
a+=1.0/x;
temp = (1.0+a);
}
System.out.println("pi="+4*temp);
}
}
复制代码
作者:
taoge
时间:
2014-1-3 01:43
先问问楼主,你说的这个极限是什么?很显然这个极限不是一个具体的值,而是在无限接近,那怎么可能输出这个值呢。double型是有 有效位数的,楼主要是非要个极限数就把i小于的条件去掉,输出放到循环里,一直观察输出直到输出的数不再变化为止,这个时间估计得很长
作者:
taoge
时间:
2014-1-3 01:57
我写了一个你参考一下
import java.text.DecimalFormat;
class Test1
{
public static void main(String[] args)
{
double pi, a = 0, b = 0, temp = 0, temp1 = 0, temp2 = 0;
int count = 0;
DecimalFormat df = new DecimalFormat("#.00000");//多少个0就表示小数点后多少位,你也可以多写几个0,不过不建议写多,计算很费时间
for (int x = 3; true; x += 2)
{
count++;
if (count % 2 != 0)
{
a -= (1.0 / x);
temp1 = (1.0 + a);
} else
{
a += 1.0 / x;
temp2 = (1.0 + a);
}
if (Double.parseDouble(df.format(4 * temp1)) == Double
.parseDouble(df.format(4 * temp2)))
{
System.out.println("pi=" + df.format(4 * temp1));
break;
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2