Java中的NAN和INFINITY
2016-10-23 21:52
369 查看
java浮点数运算中有两个特殊的情况:NAN、INFINITY。
我们知道,在整型运算中,除数是不能为0的,否则直接运行错误。但是在浮点数运算中,引入了无限这个概念,我们来看一下Double和Float中的定义。
Double:
Float:
考虑下面几个问题:
Float和Double中的无限有什么区别?
例如无限乘以0会是什么?
0除以0又会有什么结果?
来看下面的示例
从上面几组测试中我们可得出一些结论:
t1: Float中的无限和Double中的无限是相等的。
t2: 无限乘以0得到的值为NAN,即非数字。
t3: 除了乘以0外,对无限值做运算所得的值还是无限
要判断一个浮点数是否为INFINITY,可用t4中所示的isInfinite方法。
NAN表示非数字,它与任何值都不相等,甚至不等于它自己,所以要判断一个数是否为NAN要用isNAN方法:
NaN参与的运算都为NaN,即
NaN + Infinity = NaN, NaN-Infinity=NaN
Infinity与-Infinity参与的运算:
Infinity与-Infinity的加、减都分别为其自身.
有限数与Infinity、-Infinity的运算:
零与Infinity、-Infinity的运算:
Float 32位单精度浮点数 10^-38 ~ 10^38 和 -10^-38 ~ -10^38
Double 64位双精度浮点数 10^-308 ~ 10^308和 -10^-308 ~ -10^308
当浮点数超过取值范围的时候,会用INFINITY进行表示。并且INFINITY能够与数值类型进行比较。零减去正无穷能得到负无穷。
个人心得:即时浮点数超出取值范围,不会抛出错误,用INFINITY进行表示,仍能正常地进行比较,在编程的一些时候很方便。
例如:string转数值型,如果是含有错误字符,便会抛出异常,如果是超过范围便会用“INFINITY”或者“-INFINITY”表示
参考博客:
http://www.cnblogs.com/zhisuoyu/archive/2016/03/24/5314541.html
http://blog.csdn.net/doctor_feng/article/details/6768601
1、INFINITY:
在浮点数运算时,有时我们会遇到除数为0的情况,那java是如何解决的呢?我们知道,在整型运算中,除数是不能为0的,否则直接运行错误。但是在浮点数运算中,引入了无限这个概念,我们来看一下Double和Float中的定义。
Double:
public static final double POSITIVE_INFINITY = 1.0 / 0.0; public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
Float:
public static final float POSITIVE_INFINITY = 1.0f / 0.0f; public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
考虑下面几个问题:
Float和Double中的无限有什么区别?
例如无限乘以0会是什么?
0除以0又会有什么结果?
来看下面的示例
public static void main(String[] args) { float fPos=Float.POSITIVE_INFINITY; float fNeg=Float.NEGATIVE_INFINITY; double dPos=Double.POSITIVE_INFINITY; double dNeg=Double.NEGATIVE_INFINITY; //t1 System.out.println(fPos==dPos); //output: true System.out.println(fNeg==dNeg); //output: true //t2 System.out.println(fPos*0); //output: NAN System.out.println(fNeg*0); //output: NAN //t3 System.out.println(fPos==(fPos+10000)); //output: true System.out.println(fPos==(fPos*10000)); //output: true System.out.println(fPos==(fPos/0)); //output: true //t4 System.out.println(Double.isInfinite(dPos)); //output: true }
从上面几组测试中我们可得出一些结论:
t1: Float中的无限和Double中的无限是相等的。
t2: 无限乘以0得到的值为NAN,即非数字。
t3: 除了乘以0外,对无限值做运算所得的值还是无限
要判断一个浮点数是否为INFINITY,可用t4中所示的isInfinite方法。
2、NAN:
ava中的NAN是这么定义的:public static final double NaN = 0.0d / 0.0;
NAN表示非数字,它与任何值都不相等,甚至不等于它自己,所以要判断一个数是否为NAN要用isNAN方法:
public static void main(String[] args) { double nan=Double.NaN; System.out.println(nan==nan); //output: false System.out.println(Double.isNaN(nan)); //output: true }
3、NAN与INFINITY参与运算的情况
零除以零=NaN,即0/0 = NaN非零数被零除的无穷值,即5.0 /0 = Infinity, -5.0/0 = -Infinity
NaN参与的运算都为NaN,即
NaN+NaN = NaN, NaN-NaN = NaN, NaN * NaN = NaN, NaN / NaN = NaN, NaN / 5.0 = NaN, NaN / Infinity = NaN, NaN / -Infinity = NaN,
NaN + Infinity = NaN, NaN-Infinity=NaN
Infinity与-Infinity参与的运算:
Infinity + Infinity = Infinity, Infinity-Infinity = NaN Infinity*Infinity=Infinity, Infinity / Infinity = NaN -Infinity + -Infinity = -Infinity, -Infinity - -Infinity = NaN, -Infinity * -Infinity = Infinity, -Infinity / -Infinity = NaN Infinity / 0 = Infinity, -Infinity / 0 = -Infinity Infinity / 5.0 = Infinity, Infinity / -5.0 = -Infinity, -Infinity / 5.0 = -Infinity, -Infinity / -5.0 = Infinity
Infinity与-Infinity的加、减都分别为其自身.
有限数与Infinity、-Infinity的运算:
5.0 / Infinity = 0.0, -5.0 / Infinity = 0.0, 5.0 / -Infinity = -0.0, -5.0/Infinity = -0.0
零与Infinity、-Infinity的运算:
0 / Infinity = 0.0, 0 / -Infinity = -0.0
4、INFINITY心得
Java浮点型的取值范围:Float 32位单精度浮点数 10^-38 ~ 10^38 和 -10^-38 ~ -10^38
Double 64位双精度浮点数 10^-308 ~ 10^308和 -10^-308 ~ -10^308
当浮点数超过取值范围的时候,会用INFINITY进行表示。并且INFINITY能够与数值类型进行比较。零减去正无穷能得到负无穷。
个人心得:即时浮点数超出取值范围,不会抛出错误,用INFINITY进行表示,仍能正常地进行比较,在编程的一些时候很方便。
例如:string转数值型,如果是含有错误字符,便会抛出异常,如果是超过范围便会用“INFINITY”或者“-INFINITY”表示
参考博客:
http://www.cnblogs.com/zhisuoyu/archive/2016/03/24/5314541.html
http://blog.csdn.net/doctor_feng/article/details/6768601
相关文章推荐
- Java中的Infinity和NaN
- Java中的Infinity和NaN
- Java 中的NAN 和 infinity
- Java中的Infinity和NaN
- Java中的Infinity和NaN
- 关于Java中NaN,Infinity,-Infinity参与算术运算的各种情况
- JAVA-数值计算中的特殊情况,NAN,Infinity
- java中Infinity和NAN
- java中的NAN和INFINITY
- Java中的Infinity和NaN
- java中的NAN和INFINITY
- Scala和Java中的Infinity和NaN
- Java中的Infinity和NaN
- java NAN 和 INFINITY
- Java中的NaN和Infinity
- Java浮点运算中特殊的情况NAN与Infinity
- Java中遭遇NaN
- js中的NaN、Infinity、null和undefined
- 20.5.2 Infinity and NaN
- JavaScript那些事儿(2):Math,Infinity与NaN,它们不是浮云,中学数学都学过