我想将定点数(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) );
但是它不起作用。您可以看到任何明显的错误吗?
答案 0 :(得分:0)
我的问题是两个数字是Q31,我想要一个Q31答案,所以我实际上需要在我的部门有一个Q1.62分子。我的代码有效地使用了Q63分子,然后除以Q31,最终结果限制为[-0.5,0.5)而不是[-1,1)。
解决方案是将位移位31而不是32,以获得Q1.62分子,现在我对自己正在做的事情有了更多的了解。