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