IEEE浮點數(shù)表示法

IEEE浮點數(shù)標(biāo)準將數(shù)表示成形式V=(-1)^s\times M\times 2^E

  • 符號數(shù)s:決定了數(shù)是負的(s=1)還是正的(s=0),其中把數(shù)值0的符號位解釋當(dāng)做是一種特殊情形。
  • 有效數(shù)M:一個二進制分數(shù),范圍要么是在12-\epsilon之間,要么是在01-\epsilon之間。
  • 指數(shù)E:用2的冪次方對數(shù)值加權(quán)。

浮點數(shù)的位表示分成3個字段對符號數(shù)s、有效數(shù)M、指數(shù)E進行編碼:

  • 1位的符號字段s對符號數(shù)s進行編碼。
  • k位的指數(shù)字段exp=e_{k-1}...e_1e_0對指數(shù)E進行編碼;
  • n位的分數(shù)字段frac=f_{n-1}...f_1f_0對有效數(shù)M進行編碼,但是編碼后的frac值取決于指數(shù)字段exp是否等于0。

圖2.32展示了如何將這3個字段打包成兩種最常見格式的字。


標(biāo)準的浮點數(shù)格式.png
  • 在單精度浮點數(shù)格式(C語言中的float)里,字長為32位:1位表示符號字段s,8位表示指數(shù)字段exp,23位表示分數(shù)字段frac。
  • 在雙精度浮點數(shù)格式(C語言中的double)里,字長為64位:1位表示符號字段s,11位表示指數(shù)字段exp,52位表示分數(shù)字段frac。

對于單精度浮點數(shù),根據(jù)指數(shù)字段exp的值,一個給定二進制表示的數(shù)值可分成3種不同的情況:

情形1:可歸一化數(shù)

特征

指數(shù)字段exp既不全是0,也不全是1;
指數(shù)值E=exp-Bias;
M=1+f

解釋:

  • 單精度情形下,指數(shù)字段exp的無符號數(shù)范圍是1到254,雙精度情形下,指數(shù)字段exp的無符號數(shù)范圍是1到2046;
  • 解釋指數(shù)E為一個用偏移形式表示的有符號數(shù),即指數(shù)值E=exp-Bias,其中exp是位模式為e_{k-1}...e_1e_0的無符號數(shù),Bias=2^{k-1}-1(單精度情形數(shù)值為127=2^{8-1}-1,雙精度情形數(shù)值為1023=2^{11-1}-1)。據(jù)此可得出:單精度情形下指數(shù)值E的數(shù)值范圍是-126127,雙精度情形下指數(shù)值E的數(shù)值范圍是-10221023
  • 解釋有效數(shù)M為一個二進制表示為1.f_{n-1}...f_1f_0的數(shù),等價于有效數(shù)M=1+f,這叫做隱式1開頭表示。這樣能多表示1位精度,因為通常會調(diào)整指數(shù)E使得有效數(shù)M滿足1\leq M<2,且開頭的位一直等于1,不需要顯式地表示。用字段frac來表示分數(shù)值f,其中0\leq f<1,對應(yīng)的二進制表示為0.f_{n-1}\cdots f_1f_0。

情形2:不可歸一化數(shù)

特征:

指數(shù)字段exp全是0
指數(shù)值E=1-Bias
有效數(shù)M=f;

解釋:

  • 有效數(shù)M=f,表示分數(shù)字段frac沒有隱式的開頭1;

為什么要提供不可歸一化數(shù)?

  1. 不可歸一化數(shù)提供了一種表示0的方法
    由于可歸一化數(shù)對應(yīng)的有效數(shù)M\geq 1,所以不能用可歸一化數(shù)來表示0
  2. 為了表示非常接近0的數(shù)。
    不可歸一化數(shù)可提供熟知的漸近下溢性質(zhì):所有可能的數(shù)值在0.0附近呈均勻分布。

如何表示+0.0?

  • 符號位s是0,即符號數(shù)s=0;
  • 指數(shù)字段exp全是0,即指數(shù)E=1-Bias=1-127=-126;
  • 分數(shù)字段frac全是0,即有效數(shù)M=f=0;
  • +0.0=(-1)^s\times M\times 2^E=(-1)^0\times 0\times 2^{-126};

如何表示-0.0

  • 符號位s是1,即符號數(shù)s=1;
  • 指數(shù)字段exp全是0,即指數(shù)E=1-Bias=1-127=-126;
  • 分數(shù)字段frac全是0,即有效數(shù)M=f=0;
  • +0.0=(-1)^s\times M\times 2^E=(-1)^1\times 0\times 2^{-126};

注意:

  • 使用IEEE浮點數(shù)標(biāo)準,數(shù)值+0.0-0.0在有些情形里當(dāng)做是一樣的,有些情形里當(dāng)做是不一樣的。

情形3:特殊值

特征:

指數(shù)字段exp全是1;

如何表示+\infty?

  • 指數(shù)字段exp全是1;
  • 分數(shù)字段frac全是0;
  • 符號位s是0,即符號數(shù)s=0

如何表示-\infty?

  • 指數(shù)字段exp全是1;
  • 分數(shù)字段frac全是0;
  • 符號位s是1,即符號數(shù)s=1;

如何表示NaN?

  • 指數(shù)字段exp全是1;
  • 分數(shù)字段frac不等于0;

兩個慣用法:

  • 當(dāng)乘以兩個非常大數(shù),或者除以0時,使用無窮大來表示運算結(jié)果;
  • 當(dāng)運算結(jié)果不能用實數(shù)或者無窮大來表示時,就使用NaN來表示;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容