浮點數的表示中為什麼要用移碼表示階碼?

時間 2021-05-11 11:53:05

1樓:

如果偏移量為127:

因此float型的取值範圍為:

取值區間大致為:

因此float型的取值範圍為:

取值區間大致為:

為了平衡浮點數精度與取值範圍(精度越大則取值範圍越小,精度越小則取值範圍越大),

IEEE標準中,規定8位階碼的偏置為127,使得浮點數的取值範圍更大。

2樓:小伊莎

(1)首先解釋為什麼要用移碼表示階碼:

便於浮點數比大小。如果階碼(指數)也用補碼來表示,就會使得乙個浮點數中出現兩個符號位:浮點數自身的和浮點數指數部分的。

這樣的結果是,在比較兩個浮點數大小時,無法像比較整數時一樣使用簡單的無邏輯的二進位制比較。故而浮點數的指數部分採用了移碼(無符號整數)來表示。

(2)其次解釋為什麼是-127:

8位移碼的取值範圍為0~255(00000000~11111111),但在浮點數的階碼中,00000000與***被保留用作特殊情況,所以階碼可用範圍只有1~254,總共有254個值。

127與128是254個值的中位數,127與128作為偏置均合理。若以127為偏置,則階碼的取值範圍為-127~126;若以128為偏置,則階碼的取值範圍為-126~127。為了平衡浮點數精度與取值範圍(精度越大則取值範圍越小,精度越小則取值範圍越大),IEEE標準中,規定8位階碼的偏置為127,使得浮點數的取值範圍更大。

3樓:洛葉

浮點數表示法中,階碼通常要用移碼表示的主要原因是:

規格化浮點數的最大負數(-Nmax)和取小正數(Nmin)都與通過階碼的最小負數值有關,而在除移碼之外的其它所有碼制中,最小負數都不是全0(包括符號位)。如果浮點零與機器零不一致,對軟體設計和硬體設計都會造成許多麻煩。

4樓:

我來解釋下為什麼IEEE標準中,8位階碼的偏置為127。

1、8位移碼的取值範圍為0~255(00000000~11111111),但在浮點數的階碼中,00000000與***被保留用作特殊情況,所以階碼可用範圍只有1~254,總共有254個值。

2、8位有符號數取值範圍為-128~+127(10000000~01111111),這裡的二進位製用補碼表示,其中特別規定補碼***沒有原碼,為-128的補碼,總共有256個值。

3、如果採用偏置128,在表達+127時會產生上溢(移碼***被保留),所以在階碼中偏置為(128-1),與此同時,在表達-127時會產生下溢(移碼***被保留),所以階碼中去掉-127與-128,取值範圍為-126~127,總共254個值。

另外我再補充一下對32位float型資料的取值範圍的研究:

最高位為符號位;

指數:共8個bit,佔據30~23位;

底數:實際是占用24個bit,由於其最高位始終為1,所以最高位省去不儲存,在儲存中只有23個bit,佔據22~0位;

當22~0位全部置1時,底數取得最大值,接近於2。

當22~0位全部置0時,底數取得最小值,為1。

因此float型的取值範圍為:

-2*2^127 ~ -1*2^(-126) 與 1*2^(-126) ~ 2*2^127

轉化得:

-3.4*10^38 ~ -1.2*10^(-38) 與 1.2*10^(-38) ~ 3.4*10^38

5樓:廢貓八方通行

各位答主說的都挺對,但是好像沒有解釋為何IEEE中階碼偏置是2^(n-1) - 1而不是2^(n-1),這個我有時間就補充完整。

6樓:zy zhu

比如階碼為7 和-7兩個值進行比較

如果直接用補碼或者原始碼則需要符號位即0 0000111/ 1 0000111

這樣在比較浮點數的時候就要比較兩次符號位即階碼的符號位跟尾數的數符對機器來說麻煩

而如果採用移碼機器位為8的話偏移量為2^7=127 即7=134 -7=120

這樣對134 跟120比較進行比較就不需要考慮符號位

之所以偏移量一般為2^n-1 就是為了將[-2^(n-1),2^(n-1)-1)的值域轉換為[0,2^n-1)免除符號位

(純屬個人理解)

7樓:

便於浮點數比大小。

如果階碼(指數)也用補碼來表示,就會使得乙個浮點數中出現兩個符號位:浮點數自身的和浮點數指數部分的。這樣的結果是,在比較兩個浮點數大小時,無法像比較整數時一樣使用簡單的無邏輯的二進位制比較。

故而浮點數的指數部分採用了移碼(無符號整數)來表示。

8樓:MXGXMG

你可以想一下,如果我們比較兩個向量,是不是要把它們平移到同一起點譬如座標原點。所有數加同樣乙個數,然後無論正負階碼都成為正的了。

9樓:吳迪

因為浮點數的階碼表示指數大小,有正有負,對每個階碼都加上乙個正的常數(稱偏移常數),使能表示的所有階碼都為正整數,這就變成「偏移」了的階碼也就是移碼,浮點數小數點的實際位置由移碼減去偏移常數來決定。

為什麼叫浮點數

道不輕傳 定點數能表示的數字有限,因為小數點固定,整數字和小數字就固定,就不利於表達特別大或特別小的數,浮點數就可以表示很大或很小的數字,因為小數點不固定,比如 123.45 用十進位制科學計數法可以表達為 1.2345 10 其中 1.2345 為尾數,10 為基數,2 為指數。浮點數利用指數達到...

浮點數不能表示的最小正整數是?

春日的憂鬱 首先浮點數呈離散分布,且其步長為2 e 2 n 此公式證明可參照此問題下另一位答主的數學推導 取實際階碼值 階碼用移碼表出 e n,步長為1,此時最大可表達的值為11 11B 由於隱藏位,共n 1個1 算出2 n 1 1,此時從2 n到2 n 1 1之間的正整數都能精確表達。實際上通過改...

Python中為什麼將浮點數賦值給變數,似乎可以直接使用 號進行比較?

邱昊宇 這玩意兒換成 C 也沒啥兩樣呀 include define print v printf s n v True False intmain 編譯執行以後的輸出一模一樣。自己把這些數換成二進位制然後保留 53 位有效數字算一算就知道了。那幾個可以用 判斷的,是因為左右兩邊真的相等。但是這種相...