浅谈Java中的NAN与INFINITY:数值迷失与无限可能

简介: 浅谈Java中的NAN与INFINITY:数值迷失与无限可能

在Java中,NAN(Not-a-Number)INFINITY(无穷大)是浮点数类型(float和double)的特殊值,用于表示特定的数值情况。以下是关于NAN和INFINITY的详细解释和示例代码:

1、NAN

NAN是一个特殊的浮点数值,表示无效或未定义的数值结果。它通常出现在无法进行有效计算或产生无法表示的结果时。例如,0.0除以0.0或负数的平方根等操作都会产生NAN。

基本类型示例代码

1. double a = 0.0 / 0.0;  // 产生NAN
2. double b = 0.0 / 0.0;  // 产生NAN
3. double c = 0.0 / 0.0;  // 产生NAN
4. System.out.println(a);  // 输出: NaN
5. System.out.println(a!=a);  // 输出: true
6. System.out.println(a!=b);  // 输出: true
7. System.out.println(a!=c);  // 输出: true
8. System.out.println(Double.isNaN(a));  // 输出: true

结论:对于基本类型,NaN和自己是不相等的,NaN和任何值都不相等,可以通过Double.isNaN(a)的方式来判断是不是NaN,该方法实现也是通过v != v来判断的

包装类型示例代码

1. double b = 0.0d / 0.0; //NaN
2. Double c = 0.0d / 0.0; //NaN
3. Double d = 0.0d / 0.0; //NaN
4. System.out.println(Double.isNaN(c)); //true
5. System.out.println(Double.isNaN(d)); //true
6. System.out.println(c == c); //true
7. System.out.println(c == d); //false
8. System.out.println(c == b); //false
9. System.out.println(c.equals(c)); //true
10. System.out.println(c.equals(d)); //true
11. System.out.println(c.equals(b)); //true

结论:对于包装类型,通过"=="比较和自己是相等的,和其他NaN不相等;

通过"equals"比较是,和自己相等,和其他NaN也相等。

2、INFINITY(无穷大):

INFINITY表示一个超出浮点数范围的数值,可以是正无穷大(+INFINITY)或负无穷大(-INFINITY)。它通常出现在数值溢出或除以0的情况下。

基本类型示例代码

1. double a = 1.0 / 0.0; //Infinity
2. double b = 1.0 / 0.0; //Infinity
3. System.out.println(Double.isInfinite(a)); //true
4. System.out.println(a == a); //true
5. System.out.println(a == b); //true

结论: 对于基本类型Infinity和自己相等,和其他的Infinity也相等

包装类型示例代码

1. double b = 1.0 / 0.0; //Infinity
2. Double c = 1.0 / 0.0; //Infinity
3. Double d = 1.0 / 0.0; //Infinity
4. System.out.println(Double.isInfinite(c)); //true
5. 
6. System.out.println(c == c); //true
7. System.out.println(c == d); //false
8. System.out.println(c == b); //true
9. 
10. System.out.println(c.equals(c)); //true
11. System.out.println(c.equals(d)); //true
12. System.out.println(c.equals(b)); //true

结论:包装类型Double的Infinity,通过"=="比较和自己是相等的,和其他包装类型的Infinity不相等,但是和其他基本类型的Infinity是相等的;

通过"equals"比较是,和自己相等,和其他Infinity也相等

目录
相关文章
|
3月前
|
Java
2048. 下一个更大的数值平衡数 --力扣 --JAVA
如果整数  x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。 0 <= n <= 106
131 3
java 数值判断工具类
java 数值判断工具类
|
2月前
|
Java
死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`
【6月更文挑战第20天】死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`volatile`保证变量的可见性和部分原子性,确保多线程环境中值的即时更新。与`synchronized`相比,`volatile`作用于单个变量,不保证原子操作,同步范围有限,但开销较小。`synchronized`提供更全面的内存语义,保证原子性和可见性,适用于复杂并发控制。
24 3
|
2月前
|
人工智能 Java 物联网
【未来趋势】JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
【6月更文挑战第21天】JAVA网络编程核心URL和URLConnection驱动智能API调用与实时数据流处理,适应微服务、物联网趋势。通过案例展示,它们在API集成、实时流处理中发挥关键作用,预示着与AI、大数据结合的自动化与高效性。未来,开发者需把握这些技术,共创网络编程新篇章。
27 0
|
3月前
|
分布式计算 Java 大数据
Java的魅力与深度:探索编程世界的无限可能
Java编程语言因其平台无关性、面向对象、丰富的API库和安全性等特点深受开发者喜爱。广泛应用于Web开发、移动应用(尤其是Android)、大数据处理和游戏开发等领域。通过实例展示了Java的基本语法,包括类、属性、构造函数、getter和setter。随着技术进步,Java将持续影响编程领域并创造更多可能。
|
3月前
|
Java Go C++
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
56 0
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
|
3月前
|
存储 Java 索引
Java数值类型提升机制
Java数值类型提升机制
39 0
java202303java学习笔记第四十二天DQL-数值函数2
java202303java学习笔记第四十二天DQL-数值函数2
56 0
|
存储 缓存 Java
Java 8 - 数值流Numberic Stream
Java 8 - 数值流Numberic Stream
87 0
|
Java Nacos
Java:nacos客户端ClientWorker无限输出更新日志
Java:nacos客户端ClientWorker无限输出更新日志
333 0