Float16,也被称为FP16或半精度浮点数,是一种用于表示浮点数的数据类型,在计算机科学中广泛应用于各种领域。以下是对Float16的详细说明:
一、基本构成
Float16使用16位(即2个字节)来表示一个浮点数,这16位被分为三部分:
- 符号位:1位,用于表示数的正负。0代表正数,1代表负数。
- 指数位:5位,用于表示数的大小。其范围是00001~11110,对应的十进制数是1~30。为了得到实际的指数值,需要从这些值中减去一个偏置值15,因此实际指数的范围是-14~15。
- 尾数位:10位,用于表示数的精度。其范围是0~1023,这些值除以1024后得到实际的尾数值,范围是0~0.9990234375。
二、计算方式
Float16类型的数的计算公式是:
三、表示范围
-
表示范围:
- 最大值:当符号位为0,指数位为11110(即十进制中的30),尾数位为全1时,Float16的最大值为2^15×(1+1023/1024)=65504。
- 最小值:当符号位为1,指数位为11110(即十进制中的30),尾数位为全1时,Float16的最小值为−1×2^15×(1+1023/1024)=−65504。
需要注意的是,Float16表示的数的范围是非均匀的,即在不同的区间内,数的间隔是不一样的。
四、特殊值
在Float16中,有一些特殊的值需要特别注意:
- 无穷大(Inf):当指数位为全1,且尾数位为全0时,表示的数是正无穷大或负无穷大,具体取决于符号位的值。
- 非数(NaN):当指数位为全1,且尾数位不全为0时,表示的数是NaN,即非数。这通常用于表示某些未定义或无法表示的操作结果。
五、数值精度/数据间隔
float16数据的间隔并不是均匀的,它会因数的值而异。在不同的区间内,间隔可能有所不同。
Float16的精度是有限的,其尾数位只有10位,因此能够表示的数的精度也是有限的。 这意味着在表示某些小数时可能会出现舍入误差。
-
最高精度/数据间隔:
在float16的表示范围内,最小的间隔为2^-24。具体来说,其精度约为,指数位取1,位数位取0,就可得到。
2、最低精度/数据间隔:
在某些区间内,间隔可能会变得更大,最大的间隔可以达到2^5。例如,指数位取30时,位数位每增加1,数据就增大2^5,数据间隔2^5。