JVM-浮點數計算
阿新 • • 發佈:2020-11-16
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