float在舍弃一些精度和范围的情况下,可以做些压缩,节省存储空间。本文介绍3种压缩方式:fp16,Int8,fp block
float存储格式
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]
fp16压缩:
半精度浮点数 是一种被计算机使用的二进制浮点