Half Precision float

Half-precision floating-point format

bit15:         1 bit SIGN      +---+-------+--------------+
bit14-10:      5 bit EXP       | S | EEEEE | MM MMMM MMMM |
bit0-9:       10 bit MAN       +---+-------+--------------+

参考 IEEE754-2008 WIKIPEDIA:Half-precision floating-point format

Hall-precision floating-point number 半精度浮点数,文中简称fp16

1.计算公式

Denormal number:

E=00000 $ y=(-1)^S\times \frac{M}{2^{10}} \times 2^{-14}$

Normal number:

E=00001~11110 $y=(-1)^S\times(1+\frac{M}{2^{10}}) \times 2^{E-15}$

Inf:Infinity

E=11111 M=00000 00000

NaN: Not a number

E=11111 M>0

2.小数转fp16

例如:9.125

1) 转换为二进制表示

9->1001 $2^3+1$
0.125->0.001 $2^{-3}$
9.125->1001.001

2) 转换为二进制科学计数法

1001.001->$1.001001\times2^3$

3) 标准化

fp16总共16bit,其中尾数10bit,由于任何一个数(0除外)转换为二进制科学计数法后,整数部分一定是1,所以该bit可以不表示,及隐藏1个bit,用10bit尾数表示小数部分

因此将小数部分(尾数)补齐到10bit为:00100 10000

fp16中指数位占5bit,可以表示0~31,为了让fp16既能表示整数,也能表示小数,我们给指数E加一个bias=15,将-15~16扩充到0~31

所以3+15=18:10010

指数占1bit,用0表示整数1表示负数

综上:
9.125表示为fp16对应的二进制值为:0 10010 00100 10000

4) 公式还原

符号:S=0
指数:E=b10010=18
尾数:M=b00100 10000=144
浮点数值:$y=(-1)^0\times(1+\frac{144}{2^{10}})\times2^{18-15}=1.140625\times8=9.125$