• Infinity 与 NAN


    System.out.println(5.0/0.0+''-"+0.0/0.0); 

    正确的输出结果是Infinity-NaN

    1.为什么不是java.lang.ArithmeticException: / by zero? 
           之所以没有报异常,是因为这是浮点的除法,也就是说0.0并不是真正意义上的0,它只不过是非常接近0而已,所以y一个数除以一个接近0的数,那么结果应为无穷大。而在java浮点范围内存在Infinity表示无穷大的概念。 
    例如:System.out.println(3/0.0); 结果为Infinity 
    2、NAN 
          浮点算术保留了一个特殊的值用来表示一个不是数字的数量,这个值就是NaN(“不是一个数字(Not a Number)”的缩写)。对于所有没有良好的数字定义的浮点计算,例如0.0/0.0,或者对负数求平方根其值都是它。例如: 
    System.out.println(0.0/0.0); 
    System.out.println(Math.sqrt(-6));
    结果都为NAN 
    规范中描述道,NaN 不等于任何浮点数值,包括它自身在内。 

    3、Float.compare() 
    而当我们使用Float.compare()这个方法来比较两个NaN时,却会得到相等的结果。可以用下面的代码验证: 
    float nan=Float.NaN; 
    float anotherNan=Float.NaN; 
    System.out.println(Float.compare(nan,anotherNan));

    compare()方法如果返回0,就说明两个数相等,返回-1,就说明第一个比第二个小,返回1则正好相反。 
    上面语句的返回结果是0。 
    一般来说,基本类型的compare()方法与直接使用==的效果“应该”是一样的,但在NaN这个问题上不一致,是利是弊,取决于使用的人作何期望。当程序的语义要求两个NaN不应该被认为相等时(例如用NaN来代表两个无穷大,学过高等数学的朋友们都记得,两个无穷看上去符号是一样,但不应该认为是相等的两样东西),就使用==判断;如果NaN被看得无足轻重(毕竟,我只关心数字,两个不是数字的东西就划归同一类好了嘛)就使用Float.compare()。

  • 相关阅读:
    bootmgr is missing
    【转】ahci和IDE的区别
    win10系统故障代码:0xc000014c
    c++小数点后舍入
    关于类里再声明自身类实例的思考
    Java集合
    Python图片转字符画
    102. Binary Tree Level Order Traversal
    1041. Robot Bounded In Circle
    144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/acme6/p/7550272.html
Copyright © 2020-2023  润新知