FP8与FP16浮点数的二进制表示
FP8和FP16浮点数的构成
浮点数的构成分为三部分:1bit符号位S、若干bit指数位E、若干bit尾数位M。
FP16内部是e5m10的结构。BSA算子在A5芯片上采用的是 fp8e4m3fn 精度。
此外还有 fp8e8m0 精度,只能表示正二的次幂,常用于 scale factor
FP16的表示
对于一个FP16数字 (S,E,M)=[SEEEEEMMMMMMMMMM] 而言,其表示的数字可以按照以下流程计算:
- 正规数:E≠0且E的所有位不全为1
- 次正规数:E=0
- 特殊值:E所有位均为1
- M所有位均为0:表示 ±inf,正负取决于符号位S
- M不全为0:表示nan
FP8E4M3FN的表示
FP8E4M3FN的表示与FP16类似。
对于一个FP8E4M3FN数字 (S,E,M)=[SEEEEMMM] 而言,其表示的数字可以按照以下流程计算:
- 正规数:E≠0且E的所有位不全为1
- 次正规数:E=0
- 特殊值:E所有位均为1
- M所有位均为0:表示 ±inf,正负取决于符号位S
- M不全为0:表示nan
FP8到FP16的转换
对比两者的结构:
1 | FP16: SEEEEEMMMMMMMMMM |
设FP8数字F=(S,E,M),FP16数字F'=(S',E',M')
则可以推导出:S'=S, E'=E+8, M'=M*128