定点c程序之三:乘法

两个有符号定点数相乘结果将导致两个符号位,为此DSP处理器一般都设计了硬件控制逻辑,可以直接将乘积结果左移移位,去掉符号位以后再存储。
两个16比特定点数相乘得到的是32位定点数,一种处理方法是直接保留32比特乘积,进行后续处理;另一种处理方法是舍弃低16比特,降低精度。

设浮点乘法运算的表达式为:

float x,y,z;

z=xy ;

假设经过统计后x的Q值为Qx,y的Q值为Qy,乘积z的Q值为Qz,则

zq*2^(- Qz)   = xq* yq*2^(-(Qx +Qy))

zq=(xq* yq)*2^( Qz -(Qx +Qy))

所以定点表示的乘法为:

int x,y,z;

long temp;

temp=(long)x;

z=(temp×y)>>( QX + Qy– Qz);

 

例:

Q15×Q15=Q30     0.5×0.5 = 0.25

   0.100 0000 0000 0000

×0.100 0000 0000 0000

------------------------------------------------------------------

   00.01 0000 0000 0000 0000 0000 0000 0000 = 0.25 ; Q30

 

Q14×Q14=Q28  1.5×0.75=1.125

   01.00 0000 0000 0000

×00.11 0000 0000 0000

-------------------------------------------------------------------

   0001. 0010 0000 0000 0000 0000 0000 0000 = 1.125 ; Q28

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值