1. 程式人生 > >IEEE754標準浮點數表示與舍入

IEEE754標準浮點數表示與舍入

原文地址:[https://blog.fanscore.cn/p/26/](https://blog.fanscore.cn/p/26/) > 友情提示:本文排版不太好,但內容簡單,請耐心觀看,總會搞懂的。 # 1. 定點數 對於一個無符號二進位制小數,例如`101.111`,如果我們要用2個位元組即16位來儲存它,我們可以約定用高8位儲存小數點前的數字,用低8位儲存小數點後的數字,這樣的話它在儲存空間中就是這樣的:`00000101.11100000`。這種儲存方式中小數點的位置是固定的,這稱為定點數。這種儲存方式有個問題那就是儲存的數值是有上限的即```11111111.11111111``` = 2^7^+2^6^+2^5^+2^4^+2^3^+2^2^+2^1^+2^0^+2^-1^+2^-2^+2^-3^+2^-4^+2^-5^+2^-6^+2^-7^+2^-8^。如果我們要儲存`1111111111111111.`這個數的話,用這個儲存方式是無法儲存的,但是實際上對於這個數來說16位的儲存空間是夠用的,就是說定點數存在空間浪費的缺點。 基於這個缺點,計算機中通常用浮點數來表示一個小數。 # 2. 浮點數 **IEEE754標準**使用V = (-1)^s^ × M × 2^E^表示浮點數,符號位(sign)s 決定該數是正數(s=0)還是負數(s=1),尾數(significand)M是一個二進位制小數,階碼(exponent) E。 單精度浮點數中,s佔用1位,M佔用23位,E佔用8位,總共32位,雙精度浮點數s佔1位,M佔52位,E佔11位,總共64位,這兩種分別對應C中的float和double,另外還有一個擴充套件雙精度它佔用80位。 ![image.png](//blog.fanscore.cn/static/img/blog/2020/11/30/8199965093365652792.png) 根據E值,浮點數有三種情況, ## 2.1 規格化的:E所有位既不全為0也不全為1。 在這種情況中,階碼被解釋為以偏置(biased)形式表示的有符號整數,這時E的值表示為E=e-Bias,其中e為E所佔位所表示的無符號整數,Bias=2^E所佔位數^-1。舉個單精度浮點數的