久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

小數(shù)在內(nèi)存中究竟是如何存儲的(C語言代碼詳細(xì)講解 1)

 怪叔叔的書城 2022-01-24

??小數(shù)在內(nèi)存中是以浮點數(shù)的形式存儲的,。浮點數(shù)并不是一種數(shù)值分類,,它和整數(shù)、小數(shù),、實數(shù)等不是一個層面的概念,。浮點數(shù)是數(shù)字(或者說數(shù)值)在內(nèi)存中的一種存儲格式,它和定點數(shù)是相對的,。

C語言使用定點數(shù)格式來存儲 short,、int、long 類型的整數(shù),,使用浮點數(shù)格式來存儲 float,、double 類型的小數(shù)。整數(shù)和小數(shù)在內(nèi)存中的存儲格式不一樣,。

我們在學(xué)習(xí)C語言時,,通常認(rèn)為浮點數(shù)和小數(shù)是等價的,并沒有嚴(yán)格區(qū)分它們的概念,,這也并沒有影響到我們的學(xué)習(xí),,原因就是浮點數(shù)和小數(shù)是綁定在一起的,只有小數(shù)才使用浮點格式來存儲,。

其實,,整數(shù)和小數(shù)可以都使用定點格式來存儲,也可以都使用浮點格式來存儲,,但實際情況卻是,,C語言使用定點格式存儲整數(shù),使用浮點格式存儲小數(shù),,這是在“數(shù)值范圍”和“數(shù)值精度”兩項重要指標(biāo)之間追求平衡的結(jié)果,稍后我會給大家?guī)砩钊氲钠饰觥?/p>

計算機的設(shè)計是一門藝術(shù),,很多實用技術(shù)都是權(quán)衡和妥協(xié)的結(jié)果,。

??浮點數(shù)和定點數(shù)中的“點”指的就是小數(shù)點! 對于整數(shù),,可以認(rèn)為小數(shù)點后面都是零,,小數(shù)部分是否存在并不影響整個數(shù)字的值,所以干脆將小數(shù)部分省略,,只保留整數(shù)部分,。

定點數(shù)

??所謂定點數(shù),就是指小數(shù)點的位置是固定的,,不會向前或者向后移動,。

??假設(shè)我們用4個字節(jié)(32位)來存儲無符號的定點數(shù),并且約定,前16位表示整數(shù)部分,,后16位表示小數(shù)部分,,如下圖所示:
在這里插入圖片描述

精度
??小數(shù)部分的最后一位可能是精確數(shù)字,也可能是近似數(shù)字(由四舍五入,、向零舍入等不同方式得到),;除此以外,剩余的31位都是精確數(shù)字,。從二進(jìn)制的角度看,,這種定點格式的小數(shù),最多有 32 位有效數(shù)字,,但是能保證的是 31 位,;也就是說,整體的精度為 31~32 位,。
數(shù)值范圍
??將內(nèi)存中的所有位(Bit)都置為 1,,小數(shù)的值最大,為 216 - 2-16,,極其接近 216,,換算成十進(jìn)制為 65 536。將內(nèi)存中最后一位(第32位)置1,,其它位都置0,,小數(shù)的值最小,為2-16,。
這里所說的最小值不是 0 值,,而是最接近 0 的那個值。
綜述
??用定點格式來存儲小數(shù),,優(yōu)點是精度高,,因為所有的位都用來存儲有效數(shù)字了,缺點是取值范圍太小,,不能表示很大或者很小的數(shù)字,。
反面例子
??在科學(xué)計算中,小數(shù)的取值范圍很大,,最大值和最小值的差距有上百個數(shù)量級,,使用定點數(shù)來存儲將變得非常困難。

例如,,電子的質(zhì)量為:

0.0000000000000000000000000009 克 = 9 × 10-28 克

太陽的質(zhì)量為:

2000000000000000000000000000000000 克 = 2 × 1033 克

如果使用定點數(shù),,那么只能按照=前面的格式來存儲,這將需要很大的一塊內(nèi)存,,大到需要幾十個字節(jié),。

更加科學(xué)的方案是按照=后面的指數(shù)形式來存儲,這樣不但節(jié)省內(nèi)存,也非常直觀 這種以指數(shù)的形式來存儲小數(shù)的解決方案就叫做浮點數(shù),。 浮點數(shù)是對定點數(shù)的升級和優(yōu)化,,克服了定點數(shù)取值范圍太小的缺點。

浮點數(shù)

??C語言標(biāo)準(zhǔn)規(guī)定,,小數(shù)在內(nèi)存中以科學(xué)計數(shù)法的形式來存儲,,具體形式為:

flt = (-1)sign × mantissa × baseexponent

對各個部分的說明:

1.	flt 是要表示的小數(shù)。
2.	sign 用來表示 flt 的正負(fù)號,,它的取值只能是 0 或 1:取值為 0 表示 flt 是正數(shù),,取值為 1 表示 flt 是負(fù)數(shù)。
3.	base 是基數(shù),,或者說進(jìn)制,,它的取值大于等于 2(例如,2 表示二進(jìn)制,、10 表示十進(jìn)制,、16 表示十六進(jìn)制……)。數(shù)學(xué)中常見的科學(xué)計數(shù)法是基于十進(jìn)制的,,例如 6.93 × 1013,;計算機中的科學(xué)計數(shù)法可以基于其它進(jìn)制,例如 1.001 × 27 就是基于二進(jìn)制的,,它等價于 1001 0000,。
4.	mantissa 為尾數(shù),或者說精度,,是 base 進(jìn)制的小數(shù),,并且 1 ≤ mantissa < base,這意味著,,小數(shù)點前面只能有一位數(shù)字,;
5.	exponent 為指數(shù),是一個整數(shù),,可正可負(fù),,并且為了直觀一般采用十進(jìn)制表示。

下面我們以 19.625 為例來演示如何將小數(shù)轉(zhuǎn)換為浮點格式,。

當(dāng) base 取值為 10 時,,19.625 的浮點形式為:

19.625 = 1.9625 × 101

當(dāng) base 取值為 2 時,,將 19.625 轉(zhuǎn)換成二進(jìn)制為 10011.101,,用浮點形式來表示為:

19.625 = 10011.101 = 1.0011101×24

19.625 整數(shù)部分的二進(jìn)制形式為:
19 = 1×24 + 0×23 + 0×22 + 1×21 + 1×20 = 10011
小數(shù)部分的二進(jìn)制形式為:
0.625 = 1×2-1 + 0×2-2 + 1×2-3 = 101
將整數(shù)部分和小數(shù)部分合并在一起:
19.625 = 10011.101

可以看出,當(dāng)基數(shù)(進(jìn)制)base 確定以后,,指數(shù)
exponent 實際上就成了小數(shù)點的移動位數(shù):

1.	exponent 大于零,,mantissa 中的小數(shù)點右移 exponent 位即可還原小數(shù)的值;
2.	exponent 小于零,mantissa 中的小數(shù)點左移 exponent 位即可還原小數(shù)的值,。

換句話說,,將小數(shù)轉(zhuǎn)換成浮點格式后,小數(shù)點的位置發(fā)生了浮動(移動),,并且浮動的位數(shù)和方向由 exponent 決定,,所以我們將這種表示小數(shù)的方式稱為浮點數(shù)。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多