浮点小数和定点小数的相互转换:
-
浮点数和定点数:
- 前言: 在FPGA中为了减少存储空间,使用的小数多为定点小数,故在此记录一下浮点小数转换为 定点小数的方法
- 定点数: 约定数值的小数点固定在某一位置
以8位为例,最高位为符号位: -若整数位占4位,小数位占3位,则其最大精度为0.125,最大值为15.875 -若整数位占5位,小数位占2位,则其最大精度为0.250,最大值为31.750 -若整数位占6位,小数位占1位,则其最大精度为0.500,最大值为63.500 -若整数位占7位,小数位占0位,则其最大精度为1.000,最大值为127
- 浮点数: 小数点可以任意浮动
- IEEE 754标准:
# (-1)^S表示符号位 # M表示有效数字, 1≤M<2 M=1.fraction # 2^E表示指数位, E = exponent - 127 %%单精度 # E = exponent - 1023 %%双精度
-
浮点数和定点数的相互转化:
考虑一个浮点型变量a:
-
计算
, F是定点小数的小数位数. -
将b约分取整: 四舍五入、就近原则.
round(3.56)=4; round(-1.9)=-2; round(-1.5)=-2. -
将b转换为二进制.
-
假设需要的定点小数是w位的, 转换后b是c位的, 则将b符号位不变,符号位后填充(w-c)个零
-
实例:
-
参考代码: python版本
# # 参数含义: f: 浮点数; w: 定点位宽; x: 定点小数位数 def FloatToFixed(f,w,x): sign = 0 ## 符号位 if f < 0: sign = 1 temp = f*(2**x) temp = abs(round(temp)) # 取整并取正值 stri = '{0:0'+str(w)+'b}' # 指定位宽和填充0 result = stri.format(temp) if sign == 1: # 最高位为符号位 result = '1' + result[1:] return result
-
@zongjie 彭神语言就是强