- 實(shí)戰(zhàn)Java虛擬機(jī):JVM故障診斷與性能優(yōu)化(第2版)
- 葛一鳴
- 627字
- 2024-01-08 16:10:53
1.5.2 浮點(diǎn)數(shù)在Java虛擬機(jī)中的表示
在Java虛擬機(jī)中,浮點(diǎn)數(shù)有float和double兩種,分別是32位和64位浮點(diǎn)數(shù)。浮點(diǎn)數(shù)在虛擬機(jī)中的表示比整數(shù)略顯復(fù)雜。目前,使用最為廣泛的是由IEEE 754定義的浮點(diǎn)數(shù)格式。目前Java虛擬機(jī)中對(duì)于浮點(diǎn)數(shù)的處理參考IEEE 754的規(guī)范。本節(jié)將以float為例,簡要介紹浮點(diǎn)數(shù)的表示方法。
在IEEE 754的定義中,一個(gè)浮點(diǎn)數(shù)由3部分組成,分別是符號(hào)位、指數(shù)位和尾數(shù)位。以32位float類型為例,符號(hào)位占1位,表示正負(fù)數(shù),指數(shù)位占8位,尾數(shù)位占剩余的23位,如圖1.2所示。
其中,sflag表示符號(hào),當(dāng)s為0時(shí),sflag為1,當(dāng)s為1時(shí),sflag為-1。m為尾數(shù)值,實(shí)際占用空間為23位,但是根據(jù)e的取值,有24位精度。當(dāng)e全為0時(shí),尾數(shù)位附加為0,否則,尾數(shù)位附加為1。e為指數(shù)位,用8位表示。

圖1.2 浮點(diǎn)數(shù)格式
以浮點(diǎn)數(shù)-5為例,其內(nèi)部表示為:
1 10000001 01000000000000000000000
符號(hào)位為1表示負(fù)數(shù),指數(shù)位為10000001,表示129。
尾數(shù)位為:01000000000000000000000。因?yàn)閑不全為0,故實(shí)際的尾數(shù)位為:
101000000000000000000000
尾數(shù)位表示2的指數(shù)次冪的和,每一位表示求和數(shù)列中的對(duì)應(yīng)項(xiàng)是否為0,這里表示:
1*20+0*2-1+1*2-2+0*2-3+0*2-4+0*2-5+…,對(duì)應(yīng)關(guān)系如圖1.3所示。

圖1.3 尾數(shù)的計(jì)算
故1 10000001 01000000000000000000000的值為:
-1*2(129-127)*(1*20+0*2-1+1*2-2+0*2-3+0*2-4+0*2-5)=-1*4*1.25=-5
float浮點(diǎn)數(shù)還可以表示一些特殊的數(shù)字,如表1.1所示。
表1.1 float的特殊數(shù)字

其中,指數(shù)位全為1表示無窮大和NaN等特殊數(shù)字。指數(shù)位全為0為非規(guī)范化的浮點(diǎn)數(shù)。
【示例1-2】在Java中,使用Float.floatToRawIntBits()函數(shù)可以獲得一個(gè)單精度浮點(diǎn)數(shù)的IEEE 754表示。以下代碼打印了-5的內(nèi)部表示:

程序運(yùn)行結(jié)果為:

其中,F(xiàn)loat.floatToRawIntBits()函數(shù)最終由native方法實(shí)現(xiàn),具體實(shí)現(xiàn)如下:

從上述代碼可以看出,為了獲取float的內(nèi)部表示,使用了C語言中的union自然實(shí)現(xiàn)這個(gè)轉(zhuǎn)換。
- 基于Proteus的Arduino可視化設(shè)計(jì)
- 計(jì)算機(jī)軟件技術(shù)基礎(chǔ)
- 鑄魂:軟件定義制造
- AIDevOps:智能微服務(wù)開發(fā)、運(yùn)維原理與實(shí)踐
- 開發(fā)者關(guān)系:方法與實(shí)踐
- 卡爾曼濾波原理及應(yīng)用:MATLAB仿真(第2版)
- 敏捷軟件開發(fā):用戶故事實(shí)戰(zhàn)
- 軟件測試之魂:核心測試設(shè)計(jì)精解
- Android5.0新特性實(shí)戰(zhàn)
- 每天5分鐘玩轉(zhuǎn)OpenStack
- 軟件質(zhì)量管理指南
- 軟件架構(gòu)指標(biāo):度量軟件系統(tǒng)的性能和架構(gòu)質(zhì)量
- 持續(xù)交付2.0:業(yè)務(wù)引領(lǐng)的DevOps精要(增訂本)
- 測試開發(fā)實(shí)戰(zhàn)教程
- 基于EEG的腦源定位與腦功能網(wǎng)絡(luò)