在我的調試器,我可以看到以下值:Java減法浮點數是無窮大?
float min = -3.1931721E38
float max = 3.3434891E38
float temp = (max-min);
這將導致無窮大。這是爲什麼? (2-2^23)·2^127比臨時變量大嗎?
在我的調試器,我可以看到以下值:Java減法浮點數是無窮大?
float min = -3.1931721E38
float max = 3.3434891E38
float temp = (max-min);
這將導致無窮大。這是爲什麼? (2-2^23)·2^127比臨時變量大嗎?
該減法的數學結果大於最大可能值Float
值Float.MAX_VALUE
。 Java遵循IEEE規則進行浮點運算,結果爲Infinity
。
如果你想得到結果,那麼你可以用double
來代替,它具有更高的精度和更大範圍的有效值。
浮點乘法的結果是由IEEE 754算法的規則確定:
- [...]
- 如果的幅度產品太大而無法表示,我們說操作溢出; 結果是一個無窮大的適當符號。
甲Float
值僅爲32位(或4個字節)。所以你使用的容器太小而不能計算答案。緩衝區然後溢出。
嘗試使用一個更大的數據結構如double
這是64個比特(或8個字節)
沒有人回答您的實際問題,容器「(2-2^23)·2^127大於臨時變量吧?「。答案是否定的(你的意思是2^-23)。 – 2014-11-04 19:38:08