Edit online

单精度浮点

3 Mar 2025
Read time: 2 minute(s)

如图所示,单精度浮点标准格式 IEEE754 由三个部分组成:



1. 单精度浮点格式说明

组成部分

长度 (bit)

含义

符号位 (S)

1

  • 0:正数
  • 1:负数

阶码 (E)

8

以 2 为底数的指数,实际存储值 = 阶码真值 + 127

全 0 或全 1,需保留代表其它的意义

尾数 (M)

23

采用隐含最高位为 1 的表示方法,实际尾数是 24 位。尾数真值 = 1 + 尾数

单精度浮点标准格式的非 0 浮点数真值为 (-1)符号 * 2(阶码-127) * (1+(尾数/223)):

  • 当阶码 E 的真值 = 阶码 E-127 且 0 < E < 255,表示的范围如下所示:
    • 正数范围: +2+127 * (1+1-2-23) 到 +2-126 * (1+0)

    • 负数范围: -2+127 * (1+1-2-23) 到 -2-126 * (1+0)

  • 当 阶码 E = 0 或 E = 255,在 IEEE754 中表示特殊的数。特殊情况的含义如下所示:
    • 当阶码 ( E ) 为全 0,且尾数 ( M ) 不全为 0 时,表示该浮点数的尾数真值无需 + 1,即次正规化数,表示形式为 0.XXXXX 而不是 1.XXXXX。
    • 当阶码 ( E ) 为全 1,且尾数 ( M ) 全为 0 时,表示无穷大。正或负取决于符号位,如果符号位 ( S ) 为 0,表示正无穷大;如果符号位 ( S ) 为 1,表示负无穷大。
    • 当阶码 ( E ) 为全 1,且尾数 ( M ) 不全为 0 时,表示非数值数据(NaN),即产生 NaN 错误状态。使用此场景作为 NaN 错误检测。

      对于输入的浮点数,支持对 NaN 错误检测。

浮点和定点数据转换

FFT 模块的输入输出数据支持浮点,但内部仍以定点数方式处理数据。因此,需要在浮点和定点数据之间进行转换,具体流程如下:

  • 将浮点输入转换成 Q15 或 Q31 定点数
    • 使能:通过寄存器 FLOAT_IN_CVR,使能对输入浮点数进行 Q15 或 Q31 定点数的转换。
    • 饱和处理:FFT 输入输出处理的 Q15 或 Q31 定点数的表示的数值范围是 [-1,1),浮点数转换也基于此范围。当输入的浮点数据存在超出 [-1,1) 的情况,转换的数据直接进行饱和截止输出。
      • 如果是浮点输入转 Q15,出现正向饱和则截止为 0x7FFF(对应 215-1),出现负饱和则截止为 0x8000(对应-215)。
      • 如果是浮点输入转 Q31,出现正向饱和则截止为 0x7FFFFFFF(对于 231-1),出现负向饱和则截止为 0x80000000(对于-231)。
  • 将 Q15 或 Q31 定点数转换成浮点输出
    • 使能:通过寄存器 FLOAT_OUT_CVR,使能对输出 Q15 或 Q31 定点数进行浮点数的转换。
    • 饱和处理:FFT 输出的结果的范围为 [-1,1),定点数转浮点数的过程中不存在饱和的情况。