Java中涉及正无穷、负无穷 、NaN的算术运算测试

 

Java中含有正无穷(Double.POSITIVE_INFINITY = 1.0 / 0.0)、负无穷(Double.NEGATIVE_INFINITY = -1.0 / 0.0)和非数字(Double.NaN = 0.0d / 0.0)的定义,这些定义都是Double类中的静态常量,如果在我们的一般的算术运算中加入了这些常量,那么算术的结果是否符合数学上的正确性呢?测试代码如下:

Java代码   
  1. double a = Double.POSITIVE_INFINITY;  
  2.     System.out.println("a="+a);  
  3.     System.out.println("a+100.0=" + (a + 100.0));  
  4.     System.out.println("a+Double.MAX_VALUE=" + (a + Double.MAX_VALUE));  
  5.     System.out.println("a - Double.MAX_VALUE=" + (a - Double.MAX_VALUE));  
  6.     System.out.println("-a=" + (-a));  
  7.     System.out.println("a - a=" + (a - a));  
  8.       
  9.     System.out.println("NaN+100=" + (Double.NaN+100));  
  10.     System.out.println("NaN==NaN="+(Double.NaN==Double.NaN));  
  11.     System.out.println("NaN+Double.MAX_VALUE=" + (Double.NaN+Double.MAX_VALUE));  
  12.     System.out.println("NaN<Double.MAX_VALUE="+(Double.NaN<Double.MAX_VALUE));  
  13.     System.out.println("NaN>Double.MAX_VALUE="+(Double.NaN>Double.MAX_VALUE));  
  14.     System.out.println("NaN==Double.MAX_VALUE="+(Double.NaN==Double.MAX_VALUE));  
  15.     System.out.println("a == a=" + (a == a));  
  16.     System.out.println("100 < a=" + (100 < a));  
  17.     System.out.println("-a < 0=" + (-a < 0));  
  18.     System.out.println("Double.MAX_VALUE < a=" + (Double.MAX_VALUE < a));  

 输出结果为:

Java代码   
  1. a=Infinity  
  2. a+100.0=Infinity  
  3. a+Double.MAX_VALUE=Infinity  
  4. a - Double.MAX_VALUE=Infinity  
  5. -a=-Infinity  
  6. a - a=NaN  
  7. NaN+100=NaN  
  8. NaN==NaN=false  
  9. NaN+Double.MAX_VALUE=NaN  
  10. NaN<Double.MAX_VALUE=false  
  11. NaN>Double.MAX_VALUE=false  
  12. NaN==Double.MAX_VALUE=false  
  13. a == a=true  
  14. 100 < a=true  
  15. -a < 0=true  
  16. Double.MAX_VALUE < a=true  

 结论:

(1)正无穷和负无穷仍然保持数学上的定义;

(2)NaN是非数字,参与算术运算都为NaN,与其他数字比较结果都为false(包括自己)。

Java中涉及正无穷、负无穷 、NaN的算术运算测试,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。