`

java 里的NAN

 
阅读更多
  Double j = Double.NaN;
          System.out.println(j.isNaN());
          System.out.println(j==Double.NaN);
          System.out.println(j!=Double.NaN);
          System.out.println(Double.NaN==Double.NaN);
          System.out.println(Double.NaN!=Double.NaN);

  result

true
false
true
false
true

 

 

以下转自《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: 
class Test { 
public static void main(String[] args) { 
double i = 0.0 / 0.0; 
System.out.println(i - i == 0); 


这条计算 NaN 的规则所基于的原理是:一旦一个计算产生了 NaN,它就被损坏了,没有任何更进一步的计算可以修复这样的损坏。NaN 值意图使受损的计算继续执行下去,直到方便处理这种情况的地方为止。 总之,float 和 double 类型都有一个特殊的 NaN 值,用来表示不是数字的数量。对于涉及 NaN 值的计算,其规则很简单也很明智,但是这些规则的结果可能是违背直觉的。 
=========================================== 


一般在计算的时候,这两个只是在计算的时候,不想进行判断的时候(比如不想判断被除数是否为0),只要结果isNan就说明结果不对了

 

在Java虚拟机规范(JavaSE7)中有说道:

NaN 是无序的,对它进行任何的数值比较和等值测试都会返回 false 的比较结果。值得一提

的是,有且只有 NaN 一个数与自身比较是否数值上相等时会得到 false 的比较结果,任何数字与

 

NaN 进行非等值比较都会返回 true。

分享到:
评论

相关推荐

    java 男生女生各多少人

    在Java编程语言中,我们经常需要处理数据统计和分析的问题,比如题目中提到的“男生女生各多少人”。这个问题可以通过创建数据结构存储信息,并利用循环和条件判断来解决。下面我们将详细探讨如何用Java实现这一功能...

    使用java多线程实现男孩和女孩一起去上课的动画

    在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,提升效率并实现并发操作。在这个“使用java多线程实现男孩和女孩一起去上课的动画”项目中,我们将探讨如何利用Java的线程机制来创建一个生动有趣...

    Java源码是男人就坚持30秒

    在IT行业中,Java是一种广泛应用的高级编程语言,以其“一次编写,到处运行”的特性而闻名。这个名为"Java源码是男人就坚持30秒"的项目,显然是一款基于Java的游戏,挑战玩家在游戏中的持久力,正如标题所暗示的那样...

    java swing游戏《是男人就下一百层源码》

    Java Swing 是Java GUI(图形用户界面)库的一部分,它提供了丰富的组件和工具,用于构建桌面应用程序,包括游戏。在这个特定的案例中,我们讨论的是一个基于Java Swing开发的游戏——"是男人就下一百层"。这个经典...

    是男人就撑60秒java源码

    【标题】"是男人就撑60秒"是一款经典的休闲小游戏,它的Java源码解析将带我们深入理解游戏开发的基本原理和技术。在这个项目中,开发者使用Java编程语言实现了游戏的核心逻辑,让玩家在60秒内挑战自己的反应速度和...

    java 是男人就坚持30秒

    在Java编程领域,"是男人就坚持30秒"是一个基于GUI(图形用户界面)的小游戏,它利用了Java的多线程技术来实现游戏的动态运行。这个游戏的设计旨在挑战玩家的反应速度和耐力,目标是在30秒内尽可能地保持游戏状态,...

    是男人就下100层(java源代码)

    《是男人就下100层》是一款经典的Java游戏,基于WTK2.2和CLDC1.1平台开发,适合初级J2ME开发者学习。本文将深入解析这款游戏的源代码,带你了解J2ME游戏开发的基础知识。 一、J2ME简介 Java Micro Edition(J2ME)...

    java版是男人就下100层

    这个Java版本的游戏实现,将帮助我们深入理解Java编程语言的关键特性。 首先,我们要知道Java是一种面向对象的编程语言,它具有平台无关性、强大的内存管理以及丰富的类库等特点。在这个游戏中,我们需要创建多个类...

    是男人就下100层Kjava版

    是男人就下100层Kjava版

    写给NET/JAVA男程序员的信

    写给NET/JAVA男程序员的信 写给NET/JAVA男程序员的信 写给NET/JAVA男程序员的信

    java 中文姓氏 排序

    ### Java 中文姓氏排序详解 #### 一、引言 在处理中文数据时,我们经常需要对含有中文姓名的数据进行排序。Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。...

    java编写类进行排序

    java类,该类可以对一组数值进行由小到大排序。主类的main方法中,从键盘上输入一组数值,使用该类对其排序。

    JAVA版 是男人就下100层

    写的一个小游戏程序,由于没有美工合作,所以...源程序里已经包含相关说明 不过,实现的代码部分,我个人不是很满意,封装做的不够好,希望大家不要介意 PS:希望能有意思的美工朋友一起写些游戏玩玩。。。。互相提高

    Java 小游戏 是男人就下一百层

    【Java小游戏:是男人就下一百层】 "是男人就下一百层"是一款经典的游戏,其挑战性在于玩家需要控制角色安全地通过一层又一层的障碍,直至达到目标层数。在Java编程环境下,我们可以利用Java语言的强大功能来实现...

    G-S算法 java实现

    里面的Gs.java是算法文件。另外一个带图形界面的swing类文件可以忽略不看。 算法的输入是两个矩阵data_man 和data_woman。 data\1 里面的数据对应了男士优先的gs算法,2对应了女士优先的算法。 其中矩阵的输入代表了...

    Android是男人就下一百层Java源码

    基于JAVA的Android游戏源码,基于1.5的SDK写的,以前玩过的小游戏——是男人就下一百层源码下载,经典的安卓游戏源码,对学习Android游戏开发有帮助,用到动作类游戏的UI模型、重力感应、多媒体、网络通讯、存储、...

    是男人就下一百层SHY.rar_java 手机_java初学者_手机 游戏_游戏 java

    《是男人就下一百层》是一款经典的休闲游戏,它的Java版本是初学者学习移动平台游戏开发的一个良好起点。本文将深入探讨如何利用Java语言在手机上开发类似的游戏,以及涉及的相关技术点。 首先,Java是游戏开发中的...

    java虚拟机

    Java虚拟机(JVM,Java Virtual Machine)是Java平台的核心组成部分,它负责执行Java程序,为Java代码提供了跨平台的运行环境。Java虚拟机的概念始于Sun Microsystems,现在由Oracle公司继续发展和维护。JVM的设计...

    解析163邮箱所有邮件(java版-男孩的天职-2016-4-27)

    在本项目中,“解析163邮箱所有邮件(java版-男孩的天职-2016-4-27)”是一个使用Java语言编写的程序,旨在通过编程方式访问和解析163网易邮箱中的所有邮件。这个项目可能是由一位昵称为“男孩的天职”的开发者在...

    那群男人酒店管理系统(Java)

    简介: 该软件是我毕业时候做的一个毕业设计。并且获得了优秀毕业设计的奖项...注意: 本软件采取JAVA JDBC纯驱动连接方式。 使用前必须有驱动包!!!! 注意:该资源来自www.qoovod.com,如需转载,请保留此信息。

Global site tag (gtag.js) - Google Analytics