数据格式
数据格式 | 符号位数 | 指数位数 | 小数位数 |
BF16(Brain)与FP16相比具有更大的动态范围和更低的精度,适用深度学习模型训练 | 1 | 8 | 7 |
FP16(半精度浮点数) | 1 | 5 | 10 |
FP32(单精度浮点数) | 1 | 8 | 23 |
规范化数
exp为有符号数,bf16、fp32阶码e表示的范围为-126~+127,bias=127;fp63阶码e表示的范围为-1022~+1023,bias=1023;
value=(-1)^s*M*2^E,保证M处于1~2-ε之间
s为符号位
E为指数位,阶码e=E+bias
f为尾数,f=M-1
浮点数加减运算
对阶->尾数求和->规格化->舍入->判断结果
FP32单精度(32位)浮点数的不同编码的区分表
类型 | 符号位 (1 bit) | 指数位 (8 bits) | 尾数位 (23 bits) | 描述 |
正零 | 0 | 00000000 | 00000000000000000000000 | 表示 +0.0 |
负零 | 1 | 00000000 | 00000000000000000000000 | 表示 -0.0 |
正无穷大 | 0 | 11111111 | 00000000000000000000000 | 表示 +∞ |
负无穷大 | 1 | 11111111 | 00000000000000000000000 | 表示 -∞ |
qNaN (Quiet NaN) | 0 或 1 | 11111111 | 最高位为1,其余不全为0的任意值 | 表示静默的非数值 (NaN) |
sNaN (Signaling NaN) | 0 或 1 | 11111111 | 最高位为0,其余不全为0的任意值 | 表示用于产生异常信号的非数值 (NaN) |
规范化数 | 0 或 1 | 00000001 到 11111110 | 任意值 | 表示正常的浮点数 |
非规范化数 | 0 或 1 | 00000000 | 不全为0的任意值 | 表示非常接近0的数值 |