问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

IEEE754半精度浮点数详解:结构、计算与示例

创作时间:
作者:
@小白创作中心

IEEE754半精度浮点数详解:结构、计算与示例

引用
CSDN
1.
https://blog.csdn.net/Miracle_cx/article/details/89463503

IEEE754-2008标准中包含了一种“半精度”浮点数格式,也被称为binary16。这种16位宽的浮点数格式虽然存储空间和带宽需求仅为单精度浮点数的一半,但其精度相对较低,主要适用于对精度要求不高的应用场景。

半精度浮点数的结构

半精度浮点数的格式与单精度浮点数类似,由三部分组成:

  • 符号位(sign):最左边的一位,0表示正数,1表示负数。
  • 指数位(exponent):接下来的5位,以余-16(excess-16)的形式存储。
  • 尾数位(fraction):最后的10位,具有隐含的1。

尾数位的解释

尾数位可以理解为浮点数小数点后的部分,例如1.11的尾数就为1100000000。需要注意的是,尾数位具有隐含的1,主要用于计算时可能的进位情况。

指数位的特殊情况

指数位的值有以下几种特殊情况:

  1. 当指数位全为0且尾数位也全为0时,表示的就是0。
  2. 当指数位全为0但尾数位不全为0时,表示的是非规格化数(subnormal value),这是一个非常小的数。
  3. 当指数位全为1且尾数位全为0时,表示的是无穷大。如果符号位为0,则表示正无穷;如果符号位为1,则表示负无穷。
  4. 当指数位全为1且尾数位不全为0时,表示的不是一个数(NaN)。
  5. 其余情况下,指数位的值减去15就是其表示的指数。

半精度浮点数的计算方式

半精度浮点数的值可以通过以下公式计算:

(-1)^sign × 2^(指数位的值 - 15) × (1 + 0.尾数位)

例如,如果尾数位为0001110001,则0.尾数位为0.0001110001。

具体示例

  1. 半精度可以表示的最大值:0 11110 1111111111
    计算方法为:(-1)^0×2^(30-15)×1.1111111111 = 1.1111111111×2^15,即十进制的65504。

  2. 半精度可以表示的最小值(除了subnormal value):0 00001 0000000000
    计算方法为:(-1)^(-1)×2(1-15)=2^(-14),约等于十进制的6.104×10^(-5)。

  3. 再举一个平常的数,如-1.5625×10^(-1) ,即-0.15625
    = -0.00101(十进制转二进制)
    = -1.01×2^(-3)
    所以符号位为1,指数为-3+15=12,所以指数位为01100,尾数位为0100000000。
    所以-1.5625×10^(-1)用半精度浮点数表示就为1 01100 0100000000。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号