亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  浮點數的秘密

浮點數的秘密

時間:2024-02-14



1 前言

我們在學習 C 語言時,通常認為浮點數和小數是等價的,并沒有嚴格區分它們的概念,這也并沒有影響到我們的學習,原因就是浮點數和小數是綁定在一起的,只有小數才使用浮點格式來存儲。

其實,整數和小數可以都使用定點格式來存儲,也可以都使用浮點格式來存儲,但實際情況卻是,C 語言使用定點格式存儲整數,使用浮點格式存儲小數,這是在 “數值范圍” 和 “數值精度” 兩項重要指標之間追求平衡的結果。

2 什么是浮點數?

浮點型簡單講就是實數的意思。浮點數在計算機中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是 2)的整數次冪得到,這種表示方法類似于基數為 10 的科學記數法。

3 浮點數在內存中的存儲

首先明確一點,無論是整型、浮點型還是字符等等數據類型在計算機底層都是以二進制的方式存儲的。

浮點數在內存中的存儲和整數不同,因為整數都可以轉換為一一對應的二進制數據。而浮點數的存儲是由符號位 (sign) + 指數位 (exponent) + 小數位 (fraction) 組成。

類型符號位指數尾數
Float1位(第31位)8位(第23~30位)23位(第0~22位)
Double1位(第63位)11位(第52~62位)52位(第0~51位)

int 和 float 同樣占據四個字節的內存,但是 float 所能表示的最大值比 int 大得多,其根本原因是浮點數在內存中是以指數的方式存儲。

浮點數轉換到內存中存儲的步驟分為如下三步:

  • 將浮點數轉換成二進制
  • 用科學計數法表示二進制浮點數
  • 計算指數偏移后的值

對于第3點:計算指數時需要加上偏移量(后面有介紹為什么使用偏移量),而偏移量的值與浮點數的類型有關( float 偏移量值為 127 ,double 偏移量值為 1023)。比方對于指數 6,float 與 double 類型偏移后的值分別為:

  • float : 127 + 6 = 133
  • double:1023 + 6 = 1029

4 實例

浮點數19.625用float是如何存儲的:

  • 將浮點數轉換成二進制:10011.101(將 19.625 整數部分采用除 2 取余,小數部分采用乘 2 取整法);
  • 用科學計數法表示二進制浮點數:1.0011101*2^4;
  • 計算指數偏移后的值:127 + 4 = 131  (10000011);
  • 拼接綜上所述,float 類型的 19.625 在內存中的值為:0 - 10000011 - 001 1101 0000 0000 0000 0000。

5 float與double范圍和精度

范圍

floatdouble的范圍是由指數的位數來決定的。(因為表示的時候都是1.x * 2^Y的形式,所以忽略了1.x的效果,直接取指數表示浮點數的范圍)

  • float:

1bit(符號位) 8bits(指數位) 23bits(尾數位)

  • double:

1bit(符號位) 11bits(指數位) 52bits(尾數位)

于是,float的指數范圍為-127~+128,而double的指數范圍為-1023~+1024,并且指數位是按補碼的形式來劃分的。

其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值范圍。

float的范圍為-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38

double的范圍為-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

精度

floatdouble的精度是由尾數的位數來決定的,尾數越多能表示的小數點后面有效數字就越多,因此精度就越高。浮點數在內存中是按科學計數法來存儲的,其整數部分始終是一個隱含著的“1”,由于它是不變的,故不能對精度造成影響。

float:2^23 = 8388608,一共七位,這意味著最多能有 7 位有效數字,但絕對能保證的為 6 位,也即float的精度為 6~7 位有效數字;

double:2^52 = 4503599627370496,一共 16 位,同理,double的精度為 15~16 位。

6 解剖:為什么要用偏移量的方式來計算指數?

如果不采用偏移量的方式:

8 位 2 進制數表示的有符號數范圍有兩個區間:0000 0000~0111 11111000 0000~1111 1111,分別為0~+127-127~0。

大家看到這里的問題了吧,有兩個 0 ,一個正 0 和一個負 0。

如果采用偏移量的方式:

127 轉化為二進制是:0111 1111

那么

  • 當我們要表示 -127,則有127-1270111 1111 - 0111 1111 = 0000 0000
  • 當我們要表示 -126,則有127-1260111 1111 - 0111 1110 = 0000 0001
  • 當我們要表示 -2,則有127-20111 1111 - 0000 0010 = 0111 1101
  • 當我們要表示 -1,則有127-10111 1111 - 0000 0001 = 0111 1110
  • 當我們要表示 0,則有0+1270000 0000 + 0111 1111 = 0111 1111
  • 當我們要表示 1,則有1+1270000 0001 + 0111 1111 = 1000 0000
  • 當我們要表示 2,則有1+1270000 0010 + 0111 1111 = 1000 0001

當我們要表示128,則有128+127即1000 0000 + 0111 1111 = 1111 1111

由上面的例子,我們可以得出規律,采用移位存儲技術,我們可以使用 8 位二進制來表示從-127~+128共計 127 個負數+零(0)+ 128 個正數總共 256 個數,看來使用移位存儲既沒有 +0 和 -0 的問題,又能充分使用新生成的8位二進制數最大限度的表示單精度浮點數的冪指數,是非常合理的。

歡迎小伙伴們四連走起:點贊、在看、留言、分享。你的四連是我更文的動力。

亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久男人资源视频| 国产精品午夜国产小视频| 国产日韩精品一区二区浪潮av| 亚洲欧洲一二三| 国语自产精品视频在线看8查询8| 欧美成人精品一区| 久久久中精品2020中文| 一区二区三区毛片| 99视频精品全部免费在线| 狠狠狠色丁香婷婷综合久久五月 | 国产视频精品免费播放| 欧美视频一区二区在线观看| 亚洲欧美国产精品va在线观看 | 久久天天狠狠| 免费一级欧美在线大片| 欧美黄色一级视频| 免费一区二区三区| 久久九九99视频| 欧美国产日韩在线| 国产精品剧情在线亚洲| 在线成人欧美| 一区二区国产日产| 欧美一级黄色网| 美女视频一区免费观看| 国产精品电影在线观看| 国产日韩欧美一区在线| 亚洲一区二区三区欧美| 欧美日韩亚洲高清一区二区| 亚洲精品美女久久久久| 欧美巨乳在线| 亚洲一级电影| 红桃视频国产一区| 欧美精品一线| 亚洲一区影院| 国模一区二区三区| 欧美成人伊人久久综合网| 亚洲国产欧美不卡在线观看| 欧美福利视频一区| 一二三四社区欧美黄| 国产一区再线| 欧美日韩喷水| 欧美国产日韩一区二区三区| 亚洲一区二区精品在线| 激情六月综合| 欧美午夜片欧美片在线观看| 久久九九国产精品| 亚洲一区二区三区免费视频| 亚洲韩国精品一区| 国内精品久久久久久久97牛牛| 欧美成人四级电影| 久久精品一区四区| 亚洲综合日韩中文字幕v在线| 亚洲国产黄色片| 黄色欧美成人| 国产亚洲精品久久久久婷婷瑜伽 | 欧美大片网址| 久久精品国产999大香线蕉| 欧美一二三区精品| 亚洲香蕉在线观看| 午夜精品偷拍| 麻豆av一区二区三区| 欧美一区二区精品| 久久久爽爽爽美女图片| 亚洲欧美日本国产专区一区| 99pao成人国产永久免费视频| 亚洲精品视频中文字幕| 9人人澡人人爽人人精品| 亚洲一区二区三区色| 欧美一区中文字幕| 久久免费精品视频| 欧美激情一区在线观看| 欧美精品国产一区| 国产精品久久久久99| 韩国一区二区在线观看| 91久久综合| 性伦欧美刺激片在线观看| 久久免费少妇高潮久久精品99| 久久综合一区二区三区| 欧美日韩专区| 在线欧美电影| 欧美影院在线| 欧美日韩精品免费观看视一区二区 | 一区二区亚洲精品国产| 亚洲国产成人91精品| 亚洲色图自拍| 欧美成人亚洲成人| 国内成人自拍视频| 亚洲性感美女99在线| 欧美乱人伦中文字幕在线| 一区免费视频| 午夜欧美不卡精品aaaaa| 欧美日韩精品一二三区| 亚洲人成啪啪网站| 免费成人av在线看| 亚洲大胆美女视频| 久久躁日日躁aaaaxxxx| 国产日韩专区在线| 先锋影音网一区二区| 国产视频一区欧美| 午夜综合激情| 韩国免费一区| 性欧美18~19sex高清播放| 欧美性天天影院| 午夜国产精品视频| 国产视频精品网| 老**午夜毛片一区二区三区| 国语精品中文字幕| 欧美日韩一区二区三区四区五区| 91久久夜色精品国产网站| 欧美日韩国产一区精品一区| 亚洲视频碰碰| 一区二区三区无毛| 欧美日韩国产大片| 亚洲免费中文| 亚洲国产精品一区在线观看不卡| 久久人人爽人人爽爽久久| 亚洲国产激情| 国产精品视频久久| 狂野欧美激情性xxxx欧美| 亚洲午夜视频在线| 在线日韩中文字幕| 国产欧美在线| 欧美三日本三级少妇三2023 | 久久精品国产99精品国产亚洲性色| 狠狠色狠色综合曰曰| 国产精品美女久久| 欧美日产一区二区三区在线观看| 久久国产精品久久久| 亚洲欧美美女| 午夜精品久久久久久久久| 日韩一区二区精品葵司在线| 尤物在线观看一区| 在线观看亚洲a| 一区二区三区在线视频免费观看| 国产精品成人免费视频| 国产精品久久久久久久久久久久| 欧美激情一区二区三区不卡| 毛片基地黄久久久久久天堂| 久久久www| 久久先锋资源| 欧美精品日韩一区| 欧美系列精品| 国产字幕视频一区二区| 亚洲第一主播视频| 精品成人在线| 日韩视频在线免费| 免费看亚洲片| 激情文学一区| 亚洲精品一区二区三区99| 9久草视频在线视频精品| 午夜精品久久久久久久| 蜜桃av一区| 国产精品欧美经典| 亚洲第一精品夜夜躁人人爽| 亚洲午夜一级| 欧美精品综合| 国产亚洲精品福利| 亚洲欧美日韩天堂一区二区| 欧美精品久久久久久久| 一区精品在线| 男女精品网站| 亚洲国产精品美女| 久久精品国产77777蜜臀| 国产农村妇女毛片精品久久麻豆 | 国产精品麻豆成人av电影艾秋| 亚洲激情偷拍| 国产一区二区在线观看免费| 亚洲精品老司机| 国产精品国产三级国产专播精品人 | 国产精品二区影院| 亚洲精品一区中文| 欧美xart系列高清| 亚洲日韩欧美视频一区| 欧美日韩免费观看一区二区三区| 亚洲国产一区二区三区高清 | 欧美激情一区二区三区在线| 精品91视频| 欧美激情二区三区| 亚洲一区二区在线| 国产午夜亚洲精品不卡| 久久综合999| 一本大道久久a久久精二百| 欧美成黄导航| 亚洲在线视频观看| 狠狠色伊人亚洲综合成人| 欧美高清视频在线播放| 一本久道久久综合婷婷鲸鱼| 欧美香蕉视频| 欧美激情国产日韩精品一区18| 一区二区欧美精品| 狠狠色综合播放一区二区| 欧美成人69| 久久久久久夜| 午夜久久tv| 一区二区三区四区五区精品视频| 国产在线精品成人一区二区三区| 欧美人成网站| 欧美大片va欧美在线播放| 性做久久久久久久免费看| 一片黄亚洲嫩模|