您如何在C中对两个Q31数字进行分数(定点)除法?

时间:2019-05-12 16:43:33

标签: c fixed-point

我想将定点数(Q31 / int32表示具有31个小数位的小数)除以另一个Q31 / int32。 我想知道abs(x)> abs(y)来计算z = y / x。因此,z <1,因此可以表示为另一个Q31 / int32。 所以我想我需要将Y左移32位,并将其转换为int64。然后,我应该可以将其除以一个int32(不必进行广播,但是为了清楚起见),然后将其转换回int32:

int32_t  x, y = ?? ;
int32_t  z = (int32_t)( ((int64_t)y<<32) / ((int32_t)x) );

但是它不起作用。您可以看到任何明显的错误吗?

1 个答案:

答案 0 :(得分:0)

我的问题是两个数字是Q31,我想要一个Q31答案,所以我实际上需要在我的部门有一个Q1.62分子。我的代码有效地使用了Q63分子,然后除以Q31,最终结果限制为[-0.5,0.5)而不是[-1,1)。

解决方案是将位移位31而不是32,以获得Q1.62分子,现在我对自己正在做的事情有了更多的了解。