读书人

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

发布时间: 2012-01-26 19:40:46 作者: rapoo

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

读书人网 >J2SE开发

热点推荐