深度学习中使用的16位浮点数格式
flyfish
文章目录
- 深度学习中使用的16位浮点数格式
- 浮点数是一个近似值
- 浮点数的表示
- float单精度类型 和 double双精度类型 的比较
- 查看所占的字节数
- 大小端的比较
- 计算方法
- 16位 float 半精度格式
- bflat16格式
- bflat16格式 与 float32单精度格式 比较
浮点数是一个近似值
浮点类型使用 IEEE-754 表示形式在各种数量级上提供小数值的近似值
浮点数是近似值不是精确值
例如
#include<stdio.h>
int main()
{
float a = 1234.5 ;
float b = 1234.5678 ;
printf("%f \n",a);
printf("%f \n",b);
return 0;
}
1234.500000
1234.567749
浮点数的表示
以32位 float单精度类型 为例
符号位 sign: 占 1 bit,
指数 exponent: 占 8 bit
尾数 mantissa 或者叫fraction, 占 23 bit
float单精度类型 和 double双精度类型 的比较
查看所占的字节数
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e, f;
a = sizeof(char);
b = sizeof(short);
c = sizeof(int);
d = sizeof(float);
e = sizeof(double);
f = sizeof(long double);
cout << "char:" << a << endl;
cout << "short:" << b << endl;
cout << "int:" << c << endl;
cout << "float:" << d << endl;
cout << "double:" << e << endl;
cout << "long double:" << f << endl;
return 0;
}
char:1
short:2
int:4
float:4
double:8
long double:16
大小端的比较
计算方法
16位 float 半精度格式
bflat16格式
bflat16 是Brain Floating Point
bflat16格式 与 float32单精度格式 比较
经过两者比较,bflat16格式可以看做float32 单精度格式 截掉了低16位的结果