min 发表于 2012-8-20 09:44:40

有关于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;
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=__builtin_divud(a,b);
   }
while(1);

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

star 发表于 2012-8-20 09:52:48

Q是定点运算吗?直接用浮点看看。
页: [1]
查看完整版本: 有关于Q格式的疑问