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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4424|回复: 1
打印 上一主题 下一主题

有关于Q格式的疑问

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-20 09:44:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#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之间。请问对于这样的误差有没有什么避免的方法呢?
2#
发表于 2012-8-20 09:52:48 | 只看该作者
Q是定点运算吗?直接用浮点看看。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-11-24 01:48 , Processed in 0.047989 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表