亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++浮點型的存儲方式介紹

發布時間:2021-09-13 08:40:43 來源:億速云 閱讀:172 作者:chen 欄目:開發技術

本篇內容主要講解“C++浮點型的存儲方式介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++浮點型的存儲方式介紹”吧!

目錄
  • 浮點型及其存儲方式

    • 一、IEEE浮點標準

  • 二、存儲方式

    • IEEE 754對有效數字M和指數E的規定。

      • 重點:

        • 根據指數域不同取值分為一下三種情況: 

    浮點型及其存儲方式

    有些時候需要變量能存儲帶小數點的數,或者能存儲極大數或極小數。這類數可以用浮點(因小數點是“浮動的”而得名)格式進行存儲。C語言提供了3種浮點類型,對應三種不同的浮點格式。

    當精度要求不嚴格時(小數點后少于六位),float類型是很適合的類型。double提供更高的精度, 對絕大多數程序來說夠用了。longdouble支持極高精度的要求,很少會用到。

    C標準沒有說明float、double和long double類型提供的的精度到底是多少,因為不同計算機可以用不同方法存儲浮點數。大多數現代計算機遵循IEEE754標準(即IEC 60559) 的規范,所以這里也將它作為一個示例。

    一、IEEE浮點標準

    由IEEE開發的IEEE標準提供了兩種主要的浮點數格式:單精度(32位) 和雙精度(64位)。數值以科學記數法的形式存儲,每一個數都由三部分組成:符號、指數和小數。指數部分的位數說明了數值的可能大小程度,而小數部分的位數說明了精度。單精度格式中,指數長度為8位,而小數部分占了23位。因此,單精度數可以表示的最大值大約是3.40×1038,其中精度是6個十進制數字。

    IEEE標準還描述了另外兩種格式:單擴展精度雙擴展精度。標準沒有指明這些格式中的位數,但要求單擴展精度類型至少為43位,而雙擴展精度類型至少為79位。

    類型最小值最大值精度備注
    ●float1.175 49×10-383.402 82×1038小數點后6位單精度32位
    ●double2.225 07×10-3081.797 69×10308小數點后15位雙精度64位

    上表給出了根據IEEE標準實現的浮點類型特征。[表中給出了規范化的最小正值, 非規范化的數可以更小。] long double類型沒有顯示在此表中, 因為它的長度隨著機器的不同而變化,而最常見的大小是80位和128位。

    二、存儲方式

    對于浮點型數據,首先我們需要明白的一點是:浮點數和整型數的編碼方式是不一樣的,IEEE浮點標準采用如下形式來標識一個浮點數。

    V = (-1)S M 2E

    • (-1)S 表示符號位,當S=0時,表示正數,當S=1時,表示負數。

    • M 表示有效數字,是一個二進制小數,其值大于等于1,小于2。

    • 2E 表示指數位。

    C++浮點型的存儲方式介紹

    下面,我將用float作為例子,double道理也是一樣的,只是位數有所不同。

    例如:十進制數:88.8125 —> 二進制為:101 1000.1101

    然后將101 1000.1101化成上述公式M的形式,其范圍是[1,2),所以將小數點左移6位,得到1.0110001101×26(這里不懂的話對比十進制,小數點左移一位乘以10,二進制則乘以2)。

    最后得到S = 0、M = 1.0110001101、E = 6,但是事情并沒有那么簡單,我們接著往下看。

    IEEE 754對有效數字M和指數E的規定。

    1、有效數字M:

    1<=M<2,也就是說,M寫成1.xxx……的形式,其中xxx……表示小數部分。

    IEEE 754規定,在計算機內部保存M時,默認這個數的第一位總是1,因此可以被舍去,只保存小數部分。比如保存1.0110001101時,只保存0110001101,后面的位數補0就可以了,等到讀取的時候,再把第一位的1補上去。

    2、指數E:

    首先,E為一個無符號整數(unsigned int)

    如果E為8位,它的取值范圍為0~255;如果E為11位,它的取值范圍為0~2047。但是,我們知道,科學計數法是可以出現負數的,所以IEEE 754規定,存入內存的E是真實值加上一個中間數,對于8位的E,中間數是127,對于11位的E,中間數是1023。比如,26 的E是6,所以保存為32位浮點數時,必須保存為6+127=133,即10000101。

    重點:

    結合上述補充的信息完善例子

    float:

    十進制數:88.8125 二進制為:101 1000.1101 == 1.0110001101×26

    • 符號位:0

    • 指數位:6+127=133 二進制為:1000 0101

    • 小數位:1.0110001101去掉最高位1則為:0110001101

    因此浮點數88.8125的IEEE浮點表示為:

    ----0----1000 0101----011 0001 1010 0000 0000 0000

    符號位- -指數域- - - - - - - - - - -小數域

    根據指數域不同取值分為一下三種情況: 

    1)E不全為0或不全為1(規格化值)

    這是最常見情況,取出內存中的數時,指數E的計算值減去127(或1023),得到真實值,再將有效數字M前加上第一位的1。

    2)E全為0(非規格化值)

    這時,浮點數的指數E等于1-127(或1-1023)即為真實值,有效數字M不再加上第一位的1,而是還原為0.xxxxxxx的小數。這樣做是為了表示正負零,以及接近于0的很小的數字。

    舉個例子:編碼為如下情形:

    0 0000 0000 000 0000 0000 0000 0000 0001

    即2(-23)×2(-126)=2(-149),轉成10進制大約等于1.4×10(-45),這就是單精度所能表達最小的正數了。

    3)E全為1(特殊數值)

    當指數域全為1時屬于這種情形。此時,如果小數域全為0且符號域S=0,則表示正無窮,如果小數域全為0且符號域S=1,則表示負無窮。如果小數域不全為0時,浮點數將被解釋為NaN, 即不是一個數(Not a Number) 。比如計算負數平方根或處理未初始化數據時。

    到此,相信大家對“C++浮點型的存儲方式介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    c++
    AI

    咸丰县| 金沙县| 布拖县| 龙里县| 光泽县| 香港| 循化| 崇左市| 固安县| 崇阳县| 乌兰县| 赤峰市| 高安市| 斗六市| 武乡县| 九台市| 突泉县| 安平县| 平乡县| 台北县| 达日县| 墨竹工卡县| 乌鲁木齐县| 顺义区| 武山县| 板桥市| 华阴市| 平邑县| 克拉玛依市| 仲巴县| 松滋市| 右玉县| 临武县| 台南县| 绥滨县| 贵德县| 东至县| 桃园市| 化德县| 即墨市| 阳山县|