浮点数定点化

  FPGA只能处理定点数,Alteral stratix 10可以支持硬浮点,如军方雷达、机器视觉等硬件加速。  

  浮点数:2.918 3.1415986
  浮点转定点:(如16位,表示范围32767~-32768)
      定义小数需求多少位(如12位)
      整数需求多少位(如3位)
      最高位为符号位(针对有符号数,1位)
  对于低15位,整数最大表示7,小数最大精度1/(2^12)=0.000244140625,小数最大能表示(1/(2^12))4095=0.999755859375
  即使用15位二进制数(最大32767)表示浮点小数(最大7.999755859375)
  如对2.918定点化的过程:
    量化精度:(8/32768)
    量化结果:2.918/(8/32768)=11952.128~=11952
    定点化会产生量化误差。
  如对3.1415926定点化过程;
    3.1415926/(8/32768)=12867.9632896~=12868

    浮点数运算:2.918*3.1415926=9.1671672068
    11952x12868=153798336
    153798336=(0)_(00_1001)_(0010_1010_1100_0110_1100_0000)
    符号位1位,表示正数,
    整数6位,表示十进制数为9,
    小数24位,为(0010_1010_1100_0110_1100_0000)b=(2803392)d,
    2803392/(2^24)=0.167095184326171875
    所以153798336转换为浮点数为9.167095184326171875
    与原浮点数结果有误差。
综上:
    第一步:规定位宽
        整数位宽:能够表示整数部分的最少bit数。
        小数位宽:能够满足最大小数精度的bit数,如小数位宽为N,则能表示的小数精度为1/(2^N)
    第二步:确定最大值与最小值
    第三步:定点化处理

原文地址:https://www.cnblogs.com/MAQI/p/7489029.html