相关疑难解决方法(0)

定点的 2 次幂近似

目前,我正在使用一个小型查找表和线性插值,它非常快且足够准确(最大误差小于 0.001)。然而我想知道是否有一个更快的近似值。

由于指数的整数部分可以通过位移来提取和计算,因此近似值只需要在 [-1,1] 范围内工作我尝试找到切比雪夫多项式,但对于低多项式无法达到良好的精度命令。我猜我可以忍受 0.01 左右的最大误差,但我没有接近这个数字。高阶多项式不是一种选择,因为它们比我当前的基于查找表的解决方案效率低得多。

fixed-point approximation

4
推荐指数
1
解决办法
2879
查看次数

从固定点atan2()近似中删除慢的int64除法

我做了一个函数来计算atan2(y,x)的定点近似.问题在于运行整个函数所需的~83个循环,70个循环(在AMD FX-6100上使用gcc 4.9.1 mingw-w64 -O3进行编译)完全由一个简单的64位整数除法完成!遗憾的是,该分裂的任何条款都不变.我能加速分裂吗?有什么方法可以删除它吗?

我想我需要这个除法,因为我用1D查找表近似atan2(y,x)我需要将x,y表示的点的距离标准化为单位圆或单位正方形(我选择了一个单位')菱形'是一个旋转45°的单位正方形,在正象限上提供非常均匀的精度).所以除法找到(| y | - | x |)/(| y | + | x |).注意,除数是32位,而分子是32位数,右移29位,因此除法的结果有29个小数位.同样使用浮点除法不是一个选项,因为此函数不需要使用浮点运算.

有任何想法吗?我想不出有什么可以改善这一点(我无法弄清楚为什么只需要一个师就需要70个周期).这是完整的参考功能:

int32_t fpatan2(int32_t y, int32_t x)       // does the equivalent of atan2(y, x)/2pi, y and x are integers, not fixed point
{
    #include "fpatan.h" // includes the atan LUT as generated by tablegen.exe, the entry bit precision (prec), LUT size power (lutsp) and how many max bits |b-a| takes (abdp)
    const uint32_t outfmt = 32; // final output format in s0.outfmt
    const …
Run Code Online (Sandbox Code Playgroud)

c optimization fixed-point integer-division approximation

3
推荐指数
1
解决办法
896
查看次数