浮点数与定点数相互转换(仅考虑正数情况)

1. 浮点数转换为定点数

定点数总位宽设为 \(W\) ,小数部分字长设为 \(F\)

那么,考虑一个浮点数 \(a\) ,将其转换为定点数的操作为:

  • 一: 计算 \(b = a \times 2^{F}\) ;

  • 二: 将 \(b\) 化为整数 \(^*\) ;

  • 三: 用二进制将 \(b\) 表示成 \(c\);

  • 四: 用 \(N\) 位二进制数表示 \(c\) 成 \(c = (N-W-1)QF\) 或者 \(c = \text{fix}(1,N,F)\) \(^{**}\)。

    \(^*\)可以是去尾法,四舍五入法,向下取整法等保留整数部分

    \(^{**}\)\(N \ge W\) ,其中,当 \(N > W\) 时,高位的 \(N-W\) 位用零补齐,注意符号位;低 \(F\) 位位小数位;表示方法为定点数典型表示法:XQN表示法fix()表示法

\[\begin{flalign} &\ \text{Step1: } b = a \times2^F \\ &\ \text{Step2: } b = \text{round}(b) \\ &\ \text{Step3: } c = \text{dec2bin}(b) \\ &\ \text{Step3: } c = (N-W-1)QF \end{flalign} \]

2. 定点数转换为浮点数

已知一位宽为 \(N\) ,小数字长为 \(F\) 的二进制小数,那么其所指代的浮点数 \(a\) 为:

\[a= \text{bin2dec}(N)/2^F \]

学习参考链接:

  1. FPGA的算法解析3:定点数与浮点数 - 知乎 (zhihu.com)
  2. 浮点数和定点数的相互转换(浮点数量化为定点)_定点转浮点-CSDN博客