日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

(156)單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

 thchen0103 2017-02-02

單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型

 

C、C++中使用到的單精度浮點(diǎn)數(shù)float)類(lèi)型和雙精度浮點(diǎn)數(shù)double)類(lèi)型是在IEEE二進(jìn)制浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn)ANSI/IEEE Std 754-1985)中定義的。下面分別從存儲(chǔ)格式、內(nèi)存分布、編碼規(guī)則、取值范圍、有效數(shù)字位數(shù)和測(cè)試示例程序六個(gè)部分來(lái)詳細(xì)說(shuō)明。

存儲(chǔ)格式

浮點(diǎn)數(shù)在計(jì)算機(jī)中存儲(chǔ)時(shí),按照二進(jìn)制科學(xué)計(jì)數(shù)法拆分為三個(gè)部分:符號(hào)位、指數(shù)部分和尾數(shù)部分。如下圖所示:

單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解 

存儲(chǔ)時(shí),按照最高位存儲(chǔ)符號(hào)位,次高位存儲(chǔ)指數(shù)部分,低位存儲(chǔ)尾數(shù)部分的次序存儲(chǔ)。存儲(chǔ)時(shí)的排列示意圖如下:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

 

內(nèi)存分布

float類(lèi)型和double類(lèi)型的各部分在內(nèi)存中的存儲(chǔ)空間占用如下表:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

float類(lèi)型的內(nèi)存分布如下圖所示:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

double類(lèi)型的內(nèi)存分布如下圖所示:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

 

編碼規(guī)則

在實(shí)際存儲(chǔ)時(shí)要對(duì)使用二進(jìn)制科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)值的符號(hào)位、指數(shù)部分和尾數(shù)部分進(jìn)行編碼處理。一般需要分為規(guī)約形式的浮點(diǎn)數(shù)、非規(guī)約形式的浮點(diǎn)數(shù)和特殊值三種類(lèi)型進(jìn)行編碼。其編碼前后處理如下圖所示:

單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

注:非規(guī)約浮點(diǎn)數(shù)主要用于擴(kuò)大0值附近的浮點(diǎn)數(shù)表示范圍,非規(guī)約浮點(diǎn)數(shù)的絕對(duì)值均小于規(guī)約浮點(diǎn)數(shù)的絕對(duì)值,即前者在實(shí)數(shù)軸上更靠近0,這樣可以提高0附近的計(jì)算精度;一般CC++floatdouble的取值范圍都是按照規(guī)約浮點(diǎn)數(shù)定義的,MSDN文檔和相關(guān)教材也是這么說(shuō)的,但部分編譯器按照ANSI/IEEE Std 754-1985標(biāo)準(zhǔn)實(shí)現(xiàn)了非規(guī)約浮點(diǎn)數(shù),本文末尾留有程序示例說(shuō)明。

符號(hào)位:0表示正數(shù),1表示負(fù)數(shù);

指數(shù)部分: float的偏移量為2^8 - 1,double的偏移量為2^11 - 1;

尾數(shù)部分:實(shí)際尾數(shù)部分中的小數(shù)點(diǎn)后的數(shù)值,規(guī)約浮點(diǎn)數(shù)使用標(biāo)準(zhǔn)的二進(jìn)制科學(xué)計(jì)數(shù)法表示,其尾數(shù)范圍在 [1,2),非規(guī)約浮點(diǎn)數(shù)的尾數(shù)部分范圍在(01)。

下面以規(guī)約浮點(diǎn)數(shù)8.5為例,來(lái)說(shuō)明浮點(diǎn)數(shù)的編碼過(guò)程:

單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

 

取值范圍

單精度浮點(diǎn)數(shù)的各種極限值和取值范圍如下圖所示:單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

雙精度浮點(diǎn)數(shù)的各種極限值和取值范圍如下圖所示: 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

 

有效數(shù)字位數(shù)

因?yàn)橛行?shù)字位數(shù)只與位數(shù)有關(guān),所以只要計(jì)算出十進(jìn)制表示的尾數(shù)中有效數(shù)字位數(shù)就能知道該浮點(diǎn)數(shù)的有效數(shù)字位數(shù)。

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

注:在接近0、正無(wú)窮、負(fù)無(wú)窮等極限值時(shí),有效數(shù)字不能保證為上述精度。

測(cè)試示例程序

浮點(diǎn)數(shù)據(jù)表示測(cè)試可以通過(guò)IEEE-754 Analysis網(wǎng)頁(yè)在線測(cè)試,也可以通過(guò)自己編寫(xiě)的C\C++程序來(lái)測(cè)試。

一下是在Visual Studio 2010下編寫(xiě)的C++測(cè)試代碼:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

輸出結(jié)果如下:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

從上述結(jié)果可以看出編譯器已經(jīng)實(shí)現(xiàn)了ANSI/IEEE Std 754-1985標(biāo)準(zhǔn)中定義的float型和double型浮點(diǎn)數(shù),而頭文件定義中并未更新或修改,MSDN文檔亦是如此。如下圖:

 單精度和雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型詳解

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多