A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doyxy 中级黑马   /  2014-1-3 00:04  /  1300 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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


  1. class Test1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 double pi,a=0,b=0,temp=0;
  6.                 int count=0;
  7.                 for (int x=3;x<10000000;x+=2 )
  8.                 {
  9.                         count++;
  10.                         if (count%2!=0)
  11.                                 a-=(1.0/x);
  12.                         else
  13.                                 a+=1.0/x;
  14.                         temp = (1.0+a);        
  15.                 }
  16.                
  17.                 System.out.println("pi="+4*temp);
  18.         }
  19. }
复制代码


2 个回复

倒序浏览
先问问楼主,你说的这个极限是什么?很显然这个极限不是一个具体的值,而是在无限接近,那怎么可能输出这个值呢。double型是有 有效位数的,楼主要是非要个极限数就把i小于的条件去掉,输出放到循环里,一直观察输出直到输出的数不再变化为止,这个时间估计得很长
回复 使用道具 举报
我写了一个你参考一下
  1. import java.text.DecimalFormat;

  2. class Test1
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 double pi, a = 0, b = 0, temp = 0, temp1 = 0, temp2 = 0;
  7.                 int count = 0;
  8.                 DecimalFormat df = new DecimalFormat("#.00000");//多少个0就表示小数点后多少位,你也可以多写几个0,不过不建议写多,计算很费时间
  9.                 for (int x = 3; true; x += 2)
  10.                 {
  11.                         count++;
  12.                         if (count % 2 != 0)
  13.                         {
  14.                                 a -= (1.0 / x);
  15.                                 temp1 = (1.0 + a);
  16.                         } else
  17.                         {
  18.                                 a += 1.0 / x;
  19.                                 temp2 = (1.0 + a);
  20.                         }
  21.                         if (Double.parseDouble(df.format(4 * temp1)) == Double
  22.                                         .parseDouble(df.format(4 * temp2)))
  23.                         {
  24.                                 System.out.println("pi=" + df.format(4 * temp1));
  25.                                 break;
  26.                         }
  27.                 }

  28.         }
  29. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马