微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM-浮点数计算

 1 package javap.fload;
 2 
 3 import static jdk.nashorn.internal.objects.Global.Infinity;
 4 
 5 public class FloatTest {
 6     public static void main(String[] args) {
 7         System.out.println(+0.0F == -0.0F);
 8         System.out.println(Float.intBitsToFloat(0x8000000) == -0.0F);
 9 
10         float res = (float) (1.2 / -0.0F);
11         System.out.println(1.2 / -0.0F);  // -Infinity负无穷,任意正浮点数除以 -0.0F 得到的值
12         System.out.println(1.3 / 0.0F);  // Infinity正无穷,任意正浮点数(不包括 +0.0F)除以 +0.0F 得到的值
13         System.out.println(0.0F / 0.0F);  // Not-a-Number
14 
15         /**
16          * 正无穷+1,还是等于正无穷
17          */
18         System.out.println("Infinity+1=" + (Infinity+1));
19 
20 
21         /**
22          * NaN 有一个有趣的特性:除了“!=”始终返回 true 之外,所有其他比较结果都会返回 false。
23          * 例来说,“NaN<1.0F”返回 false,而“NaN>=1.0F”同样返回 false。
24          * 对于任意浮点数 f,不管它是 0 还是 NaN,“f!=NaN”始终会返回 true,而“f==NaN”始终会返回 false。
25          */
26         // 因此,我们在程序里做浮点数比较的时候,需要考虑上述特性。在本专栏的第二部分,我会介绍这个特性给向量化比较带来什么麻烦
27         float f = 1.0F;
28         if (f != Float.NaN) { // 返回true,其余比较返回false
29             System.out.println("f != Float.NaN");
30         }
31         if (f < Float.NaN) {
32             System.out.println("f < Float.NaN");
33         }
34 
35     }
36 }

 

结果:

true
false
-Infinity
Infinity
NaN
Infinity+1=Infinity
Infinity
f != Float.NaN

 

参考文献:https://time.geekbang.org/column/article/11503

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐