Java语言中有无穷大

来源:互联网 发布:淘宝如何赚淘金币 编辑:程序博客网 时间:2024/05/06 17:56

一休:愚公,我也故意在下面这个程序中添加了一些错误,本来是要在执行时出错的,但程序执行正常,执行的结果如图12所示。
public class FunnyNumbers
{   public static void main(String args[])
    {   double largeNum=Math.exp(4000.0);
        double posDivZero=10.0 / 0.0;
        double negDivZero=-10.0 / 0.0;
        double zeroDivZero=0.0/0.0;
        System.out.println(largeNum);
        System.out.println(posDivZero);
        System.out.println(negDivZero);
        System.out.println(zeroDivZero);
    }
}


 

可是,我把double类型改成了int类型,程序马上就不灵了。

愚公:你把程序解释一下。

一休:该程序用于显示一些特殊数据的运算,如exp(4000.0)是一个非常大的数,可能大于double类型所能够容纳的数;10.0/0.0是一个非法的运算,通过运行展示Java如何处理这些运算。

愚公:知道了,问题出在Java对double类型设置了两个特殊值,即Infinity和NaN(Not-a-Number),这就意味着Java在某种程度上可以处理一些其他语言不能处理的问题。更有趣的是,Java可以对Infinity和NaN(Not-a-Number)进行加、减、乘、除运算,你可以试验一下。

一休:我在上面的程序中增加了以下代码:
double x=largeNum+posDivZero;
double y=largeNum+negDivZero;
double z=largeNum+zeroDivZero;
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("z="+z);

计算的结果如图13所示。


 

愚公:这样计算也是对的。但Java只对double类型设置几个特殊值,int类型没有这样的设置,所以一旦执行到类似“10/0”的计算就会出现运行错误,这类问题没有什么技巧可言,因为Java语言就是这样处理的,我们了解这些规则就可以了。

0 0