Appearance
主要以FP16
为例。
概述
FP16
指有16个2进制数,其中包含1位符号位数(sign),5位作指数(exponent),10位表小数(fraction)。而对于FP32
则是1位表符号,8位表指数,23位表小数。
根据IEEE574规定,浮点数包含三个状态:
- 规格数(Normal): 指数位不全为0或1
- 非规格数(Subnormal): 指数全0
- 特殊数(Non-number): 指数全1
规格数
- 符号位:为0或者1,其中0表示正数,1表示负数
- 指数:中间5位,00000~11111,但注意到,当全0或全1时不再为规格数,故取值范围在00001~11110,转化为十进制数1~30。为了表示负指数,设置偏置(bias),并令
。根据IEEE754标准,设置偏置(bias)为 ( FP16
偏置为15),故最终指数范围$-$14~15。 - 小数: 10位,默认省略前置位1,表示范围在
- 表达公式:
- 最大值: 0111101111111111 =
= 65504 - 最小正值:0000010000000000 =
非规格数
从规格数可以看出,对于接近0的数,规格数是无法表达的。例如,在规格数的定义下,即使取出 0000000000000000 =
此时,表达式变更为
则对应的
- 小数部分全0: 表示数字0
- 最小正值: 0000000000000001 =
特殊数
- 指数: 此时,指数部分全1
- 若小数部分全0
- 符号位为1,则表示负无穷
- 符号为为0,则表示正无穷
- 若小数不全为0: 表示
NAN