英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 有关于Q格式的疑问 [打印本页]

作者: min    时间: 2012-8-20 09:44
标题: 有关于Q格式的疑问
#include "p30f4011.h"
#include "dsp.h"
//--------------------------Device Configuration------------------------      
_FOSC(CSW_FSCM_OFF & FRC_PLL16);//时钟切换,检测禁止;外部晶振,16倍频
_FWDT(WDT_OFF);//看门狗关闭
_FBORPOR(PBOR_OFF & MCLR_EN);//欠压复位禁止,MCL复位使能
_FGS(CODE_PROT_OFF); //代码保护禁止
fractional a,b,c[10];
unsigned char i;
void main(void)
{
float d=0.001;

     for(i=0;i<10;i++)
     {
      a=Q15(0.1);
         b=Q15(d);
         d+=0.001;
      c[i]=__builtin_divud(a,b);
     }
  while(1);
  
   
}
比如这个程序,C[0]中的结果应该是100,但是结果为99,C[1]应该为50,但是结果为49.通过仿真我发现这个我问题可能是因为Q格式会对数据进行舍入引起的。比如Q15(0.1)=0X0CCD但是真实的结果应该是3276.8左右,也就是介于0X0CCC与0X0CCD之间。请问对于这样的误差有没有什么避免的方法呢?

作者: star    时间: 2012-8-20 09:52
Q是定点运算吗?直接用浮点看看。





欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2