首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java的初学者有关问题,实在找不到原因

2012-01-26 
Java的菜鸟问题,实在找不到原因计算Pi的值:importjava.io.*publicclasspi{publicstaticvoidmain(String[]

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));
试试,没超过范围,超过精度了

热点排行