zoukankan      html  css  js  c++  java
  • 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()。

  • 相关阅读:
    撩妹技能 get,教你用 canvas 画一场流星雨
    git详细使用教程入门到精通(史上最全的git教程)
    Google Performance工具,你还不会用?Git走起。
    使用PIE.htc让万恶的IE内核浏览器IE678支持CSS3部分属性
    HTML编码规范
    Canvas制作的下雨动画
    Flex 布局教程:语法和实例
    CSS编码规范
    奇葩程序写的神一样的注释,被老板看见会不会开出呢?
    Vertical-Align你应该知道的一切
  • 原文地址:https://www.cnblogs.com/acme6/p/7550272.html
Copyright © 2011-2022 走看看