目錄
- 寫在前面
- Arctan快速近似計算
- 參考
博客:博客園 | CSDN | blog
寫在前面
如果\(arctan\)的計算成為了瓶頸,那么是時候對其進行優化了,

\(arctan\)的近似計算本質上是在所需精度范圍內對\(arctan\)曲線進行擬合,比較直接的想法是泰勒展開,
\[\arctan (x)=x-\frac{x^{3}}{3}+\frac{x^{5}}{5}-\frac{x^{7}}{7}+\ldots \]根據需要的精度,確定展開多少項,但\(arctan\)的泰勒展開在\(x\)接近1時,收斂較慢,并不高效,
另一個直接的想法是查表,根據所需精度,正切值定點化后,將其對應的角度保存成表,計算時,根據最近的正切值查表,一般需要較大的記憶體空間,
需要注意的是,\(arctan(x)\)回傳的是\((-\pi/2, \pi/2)\), \(arctan2(y, x)\)回傳的范圍是\((-\pi, \pi ]\),因為后者可以根據\(x\)和\(y\)的正負確定位于哪個象限,實際上,只需近似或存盤\([0, \pi/4]\)即可(即八象限中的第一象限),若輸入向量\((x, y)\),根據\(x\)和\(y\)的正負和大小關系,可以折算到所有的八個象限,
此外,CORDIC(COordinate Rotation DIgital Computer)演算法也是個選擇,僅涉及移位和加法操作,但仍需要迭代,
Arctan快速近似計算
這里,羅列paper 《Efficient Approximations for the Arctangent Function 》中的7種近似演算法,這些近似演算法通過Lagrange interpolation和minimax optimization techniques得到,最大近似誤差和所需計算如下所示,

從上到下依次為,
- 線性近似,最大近似誤差 \(0.07 \ rad = 4^{\circ}\),
- 二階近似,最大近似誤差 \(0.0053 \ rad = 0.3^{\circ}\),
- 搜索更佳的系數,最大近似誤差 \(0.0038 \ rad = 0.22^{\circ}\),
- \(\alpha x^{3}+\beta x\)形式的三階近似,最大近似誤差 \(0.005 \ rad = 0.29^{\circ}\),
- \(x(x-1)(\alpha x-\beta)\)形式的三階近似,最大近似誤差 \(0.0015 \ rad = 0.086^{\circ}\),
- \(x /\left(1+\beta x^{2}\right)\)形式的近似,最大近似誤差 \(0.0047 \ rad = 0.27^{\circ}\),
- 另一個近似,最大近似誤差 \(0.0049 \ rad = 0.28^{\circ}\),
實際使用時,可先定點化,按需選取,
以上,
參考
- Streamlining Digital Signal Processing: A Tricks of the Trade Guidebook
- FAST APPROXIMATE ARCTAN/ATAN FUNCTION
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17878.html
標籤:其他
下一篇:Trie 字典樹
