Double 中的 NAN与INFINITY
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
今天在排除代码中的Bug的时候,在浮点数运算过程中遇到了NAN与INFINITY的问题。特此记录一下。
首先明确一点的是,java浮点数中有两个特殊情况:NAN,INFINITY
1.NAN
NAN是一个特殊的值。在JDK中,NAN是这么定义的:
/*** A constant holding a Not-a-Number (NaN) value of type* {@code double}. It is equivalent to the value returned by* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.*/public static final double NaN = 0.0d / 0.0;
特意将注释也copy下来。相信加上注释,同学们就都明白是什么意思了。Not-a-Number准确道出了NAN的含义。
@Testpublic void testNan() {double NaN1 = Double.NaN;double NaN2 = 0.0 / 0.0;System.out.println(Double.isNaN(NaN1)); //trueSystem.out.println(Double.isNaN(NaN2)); //trueSystem.out.println(NaN1 == NaN1); //false}
NAN表示非数字,它与任何值都不相等,甚至不等于它自己,所以要判断一个数是否为NAN要用isNAN方法。
2.INFINITY
INFINITY主要是为了解决除数为0的情况。稍微有点数学基础的同学,都应该明白无限这个概念。
/*** A constant holding the positive infinity of type* {@code double}. It is equal to the value returned by* {@code Double.longBitsToDouble(0x7ff0000000000000L)}.*/public static final double POSITIVE_INFINITY = 1.0 / 0.0;/*** A constant holding the negative infinity of type* {@code double}. It is equal to the value returned by* {@code Double.longBitsToDouble(0xfff0000000000000L)}.*/public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
/*** A constant holding the positive infinity of type* {@code float}. It is equal to the value returned by* {@code Float.intBitsToFloat(0x7f800000)}.*/public static final float POSITIVE_INFINITY = 1.0f / 0.0f;/*** A constant holding the negative infinity of type* {@code float}. It is equal to the value returned by* {@code Float.intBitsToFloat(0xff800000)}.*/public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
这是JDK中的相关定义。很容易看出来,double与float中都有INFINITY的相关定义。
@Testpublic void testInfinity() {double Inf1 = Double.POSITIVE_INFINITY;double Inf2 = Double.NEGATIVE_INFINITY;float Inf3 = Float.POSITIVE_INFINITY;float Inf4 = Float.NEGATIVE_INFINITY;System.out.println(Double.isInfinite(Inf1)); //trueSystem.out.println(Float.isInfinite(Inf3)); //trueSystem.out.println(Inf1 == Inf3); //trueSystem.out.println(Inf2 == Inf4); //trueSystem.out.println(Inf1 * 0); //NaNSystem.out.println(Inf1 + 1); //InfinitySystem.out.println(Inf1 * 0.4); //InfinitySystem.out.println(Inf1 / 0); //Infinity}
从测试代码中,可以得出如下结论:
1.double或者float判断是不是INFINITY都使用isInfinite方法。
2.double中的INFINITY与float中的INFINITY是相等的。
3.INFINITY乘以0得到NAN。
4.INFINITY做除了乘以0意外的任何四则运算,得到的结果仍然是INFINITY。
第三点跟第四点,结果INFINITY的数学性质,很容易理解。
Double 中的 NAN与INFINITY相关推荐
- java中的NAN和INFINITY
2019独角兽企业重金招聘Python工程师标准>>> java浮点数运算中有两个特殊的情况:NAN.INFINITY. 1.INFINITY: 在浮点数运算时,有时我们会遇到除数为 ...
- -infinity java_java中的NAN和INFINITY
java浮点数运算中有两个特殊的情况:NAN.INFINITY. 1.INFINITY: 在浮点数运算时,有时我们会遇到除数为0的情况,那java是如何解决的呢? 我们知道,在整型运算中,除数是不能为 ...
- Java中的NaN(非数)、Infinity(无穷大)
直接上图: 为什么判断自己等于自己 结果还是 false? 先来说一下NaN 和 Infinity Java中提供了三个特殊的浮点数值:正无穷大.负无穷大.非数,用来表示溢出和出错.(只针对浮点数) ...
- Java中遭遇NaN
虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它.这容易理解 ,我们中大多数很少需要使用非整数类型.除了科学计算和偶尔的计时测试或基准测试程序,其它情况下几乎都用不着它.同样,大多 ...
- Java 中的 NaN
概述 简单来说可以认为 NaN 是一个数字数据类型变量值,这个类型变量被定义为 这不是一个数字. 在这篇文章中,我们对 Java 中的 NaN 进行一些简单的描述和说明和在那些操作的过程中可以尝试这个 ...
- java 判断 nan_关于java:如何测试double是否等于NaN?
我在Java中有一个double,我想检查它是否为NaN. 做这个的最好方式是什么? 使用静态Double.isNaN(double)方法,或Double的.isNaN()方法. // 1. stat ...
- 报错NAN OR INFINITY
今天遇到日志报错: INFINITY or NAN.排查代码后发现,是float做除法运算/0了. 在整型int运算中,除数是不能为0的,否则直接报异常.但是在浮点数运算中,是什么样呢?我们来看一下. ...
- javascript乘法和加法_Web前端:JavaScript中的NaN是什么?
大家好,我来了,本期为大家带来的前端开发知识是"Web前端:JavaScript中的NaN是什么?",有兴趣做前端的朋友,一起来看看吧! JavaScript中的数字类型包含整数和 ...
- python unpack infinity_fit_转换出错:输入包含NaN、infinity或对dtype(“float64”)太大的值...
我有一个形状的数据帧(144072564).尝试使用低方差函数删除低方差.但是,当我调用fit_transform时,我得到以下错误: ValueError:输入包含NaN.infinity或对dty ...
- 19【numpy中的nan和常用方法】01numpy中的nan和常用统计方法
numpy中的nan和inf 什么是nan nan/NAN/Nan not a number 表示不是一个数字 什么时候会出现nan 当我们在做类似于0/0 无穷-无穷这种无意义的运算时 当我们读取本 ...
最新文章
- Sqlite3数据库之第三方库FMDB学习心得
- automation服务器不能创建对象是什么意思_从运营商角度来考虑为什么NAT不能搭建服务器?...
- 等比数列和的快速求法
- 【已解决】查看Python中已经安装的包
- MySQL数据库如何做好优化
- Branch management
- ORA-00600 [4194] 故障处理
- mysql重置所有表_Mysql脚本之清空当前数据库下的所有表中数据,并重置自增id
- Django Rest Framework源码剖析(七)-----分页
- 为什么我推荐你用Ubuntu开发?
- tp3.2.3 命令模式
- Spring学习(下)
- Python 解析百度,搜狗词库
- 大二英语单词(粗略)
- java object转为int_java中Object转换成int或String类型方法
- 一元非线性回归方程(matplotlib)
- 正大期货市场基础知识
- signature=5a522a8356f9906b0b775bdada02a4c6,合肥2016年4月29日至2016年5月12日交通违章查询...
- calcite mysql_jsqlparser和calcite和druid功能对比
- java int 比较大小_3个int整数比较大小?