float壓縮方式

2021-10-07 04:29:45 字數 1115 閱讀 4710

float在捨棄一些精度和範圍的情況下,可以做些壓縮,節省儲存空間。本文介紹3種壓縮方式:fp16,int8,fp block

v = (-1) ^ s × m × 2 ^ e

(1)(-1)^s 表示符號位,當 s=0,v 為正數;當 s=1,v 為負數。

(2)m 表示有效數字,大於等於 1,小於 2,但整數部分的 1 不變,因此可以省略。

(3)2^e 表示指數字。

比如: 對於十進位制的 5.25 對應的二進位制為:101.01,相當於:1.0101*2^2。所以,s 為 0,m 為 1.0101,e 為 2。 

對於float 32位儲存,m為23bit,e為8bit,s 1bit,具體儲存格式,見下圖:

則,我們可以計算出,float的值範圍為:[-3.4*10^38,-1.18*10^-38]u[1.18*10^-38,3.4*10^38] 

半精度浮點數是一種被計算機使用的二進位制浮點

資料型別。半精度浮點數使用2個位元組(16位)來儲存。

在ieee 754-2008中,它被稱作binary16。這種資料型別只適合儲存對精度要求不高的數字,不適合用來計算。

ieee 754 標準指定了乙個binary16要有如下的格式:

按如下順序排列:

最大值為:0 11110 1111111111=(-1)^0 * 2^15 * (1+1-2^-10)=65504

正數最小值為:0 00001 0000000000=2^-14=6.10 * 10^-5

根據float的range,將int8 128bit,平均分,儲存float的值,精度損失與float的range範圍相關。

針對多float的儲存做壓縮,統計系列數的最大指數(exponent),並統一儲存乙個指數,統計其他的小數字(fraction),此壓縮適合於系列float值相差較少的。

float儲存方式

c語言 今天在程式中對uint32 t強制轉換float,結果發現是有損轉換,向大佬請教後得知是float儲存的比32bit的值小,所以通過詳細學習float儲存,彌補學習的短板。學習的出處為 感謝 1 s表示符號位,當s 0,v為正數 當s 1,v為負數 2 m表示有效數字,大於等於1,小於2。3...

float 資料的儲存方式

3.以下兩條輸出語句分別輸出什麼?c 難 float a 1.0f cout int a endl cout int a endl cout boolalpha int a int a endl 輸出什麼?float b 0.0f cout int b endl cout int b endl co...

float和double儲存方式

在c c 中float是32位的,double是64位的,兩者在記憶體中的儲存方式和能夠表示的精度均不同,目前c c 編譯器標準都遵照ieee制定的浮點數表示法來進行float,double運算。無論是float還是double,在記憶體中的儲存主要分成三部分,分別是 1 符號位 sign 0代表正...