0

在我的調試器,我可以看到以下值:Java減法浮點數是無窮大?

float min = -3.1931721E38 
float max = 3.3434891E38 

float temp = (max-min); 

這將導致無窮大。這是爲什麼? (2-2^23)·2^127比臨時變量大嗎?

+0

沒有人回答您的實際問題,容器「(2-2^23)·2^127大於臨時變量吧?「。答案是否定的(你的意思是2^-23)。 – 2014-11-04 19:38:08

回答

9

該減法的數學結果大於最大可能值FloatFloat.MAX_VALUE。 Java遵循IEEE規則進行浮點運算,結果爲Infinity

如果你想得到結果,那麼你可以用double來代替,它具有更高的精度和更大範圍的有效值。

7

Java Language Specification

浮點乘法的結果是由IEEE 754算法的規則確定:

  • [...]
  • 如果的幅度產品太大而無法表示,我們說操作溢出; 結果是一個無窮大的適當符號
0

Float值僅爲32位(或4個字節)。所以你使用的容器太小而不能計算答案。緩衝區然後溢出。

嘗試使用一個更大的數據結構如double這是64個比特(或8個字節)