单精度浮点
3 Mar 2025
Read time: 2 minute(s)
如图所示,单精度浮点标准格式 IEEE754 由三个部分组成:

组成部分 |
长度 (bit) |
含义 |
---|---|---|
符号位 (S) |
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),定点数转浮点数的过程中不存在饱和的情况。