日期:2014-05-20  浏览次数:20775 次

Java的菜鸟问题,实在找不到原因
计算Pi的值:

import   java.io.*;
public   class   pi{
    public   static   void   main(String[]   args){

    float   t=-1;
    double   sum=0;

    System.out.println( "Input   the   number   of   iterations: ");

    String   s   =   null;
    float   n=0;

  BufferedReader   br     =   new   BufferedReader(new   InputStreamReader(System.in));
 
  try   {
      s   =   br.readLine();
  }
  catch   (IOException   e)   {
e.printStackTrace();
  }

  n   =   Float.parseFloat(s);
    for   (float   i=1;i <=n;i=i+2){
            t=t*(-1);
            sum=sum+(t/i);
    }

  sum=sum*4;
  System.out.println( "pi= "+sum);

  }
}

程序可以编译运行,
问题是输入30000000可以立即计算出值来,输入35000000以上的值就死翘翘了,什么原因呢

------解决方案--------------------
数值溢出,造成死循环,你把所有的float替换成double
------解决方案--------------------
帮顶,顺路接分
------解决方案--------------------
for (float i = 1; i <= n; i = i + 2)

主要是这个 float

for (double i = 1; i <= n; i = i + 2)
------解决方案--------------------
double

------解决方案--------------------
路过
友情接分
------解决方案--------------------

------解决方案--------------------
不过好像运算结果不对,我记得PI的前几位是
3.141592653589793...

=========================

3.141592653589793238462643383279502884197169399375105820

我就急得这么多了。

------解决方案--------------------
当然要用double型的撒
------解决方案--------------------
赫赫,超过float取值范围了。
------解决方案--------------------
你果然很牛,PI后面小数记了那么多位~

java好像不提供捕获数据溢出异常,用catch捕获不到此异常,
------解决方案--------------------
呵呵。您定义的是float的数据类型。这个数据类型没有那么大的范围超出了能计算的范围。如果你换成double就可以了。。不行你试试
------解决方案--------------------
你给float a=35000000;
System.out.println( " " + a);
System.out.println( " " + (a+2));
试试,没超过范围,超过精度了