关于Doblue.NaN
来源:互联网 发布:网络科学导论 编辑:程序博客网 时间:2024/06/06 09:48
此篇源于王子兴同学的问题。
以下转自《JAVA解惑》一书
IEEE 754 浮点算术保留了一个特殊的值用来表示一个不是数字的数量[IEEE 754]。这个值就是 NaN(“不是一个数字(Not a Number)”的缩写),对于所有没有良好的数字定义的浮点计算,例如 0.0/0.0,其值都是它。规范中描述道,NaN 不等于任何浮点数值,包括它自身在内[JLS 15.21.1]。 你可以用任何计算结果为 NaN 的浮点算术表达式来初始化
i,例如:
double i = 0.0 / 0.0;
同样,为了表达清晰,你可以使用标准类库提供的常量:
double i = Double.NaN;
NaN 还有其他的惊人之处。任何浮点操作,只要它的一个或多个操作数为 NaN,那么其结果为 NaN。这条规则是非常合理的,但是它却具有奇怪的结果。
下面的程序将打印 false:
public class Test {
public static void main(String[] args) {
double i = 0.0 / 0.0;
System.out.println("i: " + i);//NaN
System.out.println(i - i);//NAN
System.out.println(i + i);//NaN
System.out.println(i - i == 0);//false
}
}
这条计算 NaN 的规则所基于的原理是:一旦一个计算产生了 NaN,它就被损坏了,没有任何更进一步的计算可以修复这样的损坏。NaN 值意图使受损的计算继续执行下去,直到方便处理这种情况的地方为止。 总之,float 和 double 类型都有一个特殊的 NaN 值,用来表示不是数字的数量。对于涉及 NaN 值的计算,其规则很简单也很明智,但是这些规则的结果可能是违背直觉的。
需要注意的是,像double i = 1/0.0并不会抛出出java.lang.ArithmeticException。
但double i = 1/0;则会抛出ArithmeticException。如下:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:10)
- 关于Doblue.NaN
- 关于NaN
- 关于'CALayer position contains NaN: [nan nan]'异常
- 关于'CALayer position contains NaN: [nan nan]'异常
- 关于undefined, null 与 NaN
- fortran关于NaN的问题
- 1.1关于JavaScript出现NaN
- 关于NaN的问题整理
- nan
- NaN
- NaN
- NaN
- NaN
- 关于倒计时new Date().getTime()出现NaN
- [Caffe]:关于diff = 0/nan
- 关于IE FIREFOX 日期显示出现NaN 的问题
- IE关于js new Date() 出现NaN 的分析
- 关于百度地图api测距显示NaN的解决方案
- 线程的五种状态
- Eclipse之Advisor
- 快速配置IIS 6.0 php fastcgi +Zend Optimizer、wincache、eAccelerator
- protobuf在网络编程中的应用思考
- “五险一金”的深入解析
- 关于Doblue.NaN
- 如何增加新浪微博粉丝数
- C核心技术手册(十四)
- (C#)打印蛇形正方形矩阵
- 读《facebook效应》想到的
- 将图读进邻接表头文件C语言
- Windows Mobile开发总结
- 将图读进邻接表实现文件C语言
- [发布]主题连连看-可爱动物主题包