计算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以上的值就死翘翘了,什么原因呢
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以上的值就死翘翘了,什么原因呢
35000000
pi=3.141592596446956
现在可以了,不过改成double也不能根本解决问题,
怎么加入数据益处的异常处理?
s = br.readLine();
n = Float.parseFloat(s);
for (float i=1;i<=n;i=i+2){
t=t*(-1);
sum=sum+(t/i);
}
catch (Exception e) {
e.printStackTrace();
} }
///////////////////////////////////////////
解释一下好吗?
我就是搞不懂,35000000没超过浮点型的表示范围吧???
System.out.println("" + a);
System.out.println("" + (a+2));
试试,没超过范围,超过精度了
3500000000000001 与
3500000000000000 在float 表示是一样的,
但double 却能区别开来