正弦泰勒级数的高效实现

计算科学 数值分析 计算物理学 近似
2021-12-17 03:21:54

我正在尝试几种形式的多项式表达式优化,我想改进我所拥有的,如果有人知道他们知道更好的话。

实施1:

xx33!+x55!x77!

据我所知,这有 3 个加/减、21 个 mul 和 3 个 div。

实施2:

x(1+x2(13!+x2(15!+x2(17!))))

这似乎有 3 个加/减、13 个 mul 和 3 个 div。这是假设x2是预先计算好的。(我可能在这里算错了。)

实施3:

x(1+x23!(1+x254(1x276))))

这似乎有 3 个加/减、6 个 mul 和 3 个 div。编辑:再次,假设预先计算x2.

注意:在我所有的阶乘计算中,我没有完成1最后相乘。

我在这里做错了什么,或者有什么方法可以使这个实现在计算上更有效率?

1个回答

泰勒级数不是这样做的好方法;要获得合理的准确性需要很多术语。

不久前我在stackoverflow上回答了一个类似的问题。这是答案的正文:

以下是一些关于如何对三角函数进行幂级数逼近(虽然不是泰勒级数)的好幻灯片: http ://www.research.scea.com/gdc2003/fast-math-functions.html

它面向游戏程序员,这意味着为了性能而牺牲了准确性,但是您应该能够在近似值中再添加一两个术语以恢复一些准确性。

这样做的好处是您还应该能够轻松地将其扩展到 SIMD,这样您就可以一次计算 4 个值的 sin 或 cos(如果您使用双精度,则为 2)。

如果您真的想使用泰勒级数,请查看链接幻灯片的第二部分中的“快速多项式评估”;它提供了一些Estrin 方法的例子。