為什麼兩種浮點數型別的包裝類 Float,Double 並沒有實現常量池技術?

時間 2021-06-02 21:51:20

1樓:dwing

各種整數型別有常量池是因為valueOf根據引數定位常量池開銷很低. 而浮點數就不一樣了,判斷乙個浮點數是否整數並轉換成整數相對來說並不快, 所以valueOf索引到常量池有些開銷.

當然如果自己有這方面需求完全可以自己建立Float,Double常量池, 而且可以根據特定需求建立合適大小的池及內容. 而JDK很難預估使用者需要多大的浮點常量池,其中是否含非整數.

2樓:南瓜慢說

首先,是可以實現的,但不會實現。

實數具有稠密性: R實數集具有稠密性,即兩個不相等的實數之間必有另乙個實數。所以我們可以理解為,實數具有無數多個。

反映在程式中也是這樣嗎?不是的。浮點數是有精度的,也就是我們並不能用它列舉所有實數,所以Float/Double都是有限的。

具體是多少個,取決於它的位數。

既然是有限個,我們就可以把這某一區間有限個快取起來。但不會這麼做,首先在某個區間的浮點數還是非常多,另外,我們沒法判斷哪個區間是最容易命中的。

如果能確定哪些數是大概率命中的,就可以做。就像字串雖然是無限個,但我們還是可以有常量池。空間換取時間,值得就可以做。

3樓:吃冬瓜群眾代表

整型可以快取 1, 2, 3...,浮點型別你快取幾點幾?你別告訴我你也快取 1.0, 2.0, 3.0 ...,那你用浮點數幹嘛?

對於浮點數有上溢與下溢兩種情況,若用32位記憶體單元的浮點表示法表示範圍,那麼臨界值如何計算?

Harryfooty 我也是看的佛倫薩的 電腦科學導論 第二版,裡面寫到絕對值的最大 最小是這兩個 1 2 24 2 128 1 2 1 2 127 1 2 24其實是個等比數列的求和公式 解 S 1 2 1 2 1 2 n2S 1 1 2 1 2 1 2 n 1 兩式相減可得 S 1 1 2 n ...

浮點數的表示中為什麼要用移碼表示階碼?

如果偏移量為127 因此float型的取值範圍為 取值區間大致為 因此float型的取值範圍為 取值區間大致為 為了平衡浮點數精度與取值範圍 精度越大則取值範圍越小,精度越小則取值範圍越大 IEEE標準中,規定8位階碼的偏置為127,使得浮點數的取值範圍更大。 小伊莎 1 首先解釋為什麼要用移碼表示...

為什麼效能級獨顯的半精度浮點數運算效能會低於核芯顯示卡

丁一帆 先問是不是再問為什麼 效能級顯示卡?比不上獨顯?還不到1Tflop的計算能力就說自己強?amd 比你強25倍去個零也能吊打你 amd yes! cotton 為了形象描述,我們把核心比作馬,不同型別的浮點數比作不一樣大小的車。那麼運算過程就可以表示為馬拉車。在帕斯卡架構之前,英偉達顯示卡原生...