我想同时计算一个值的正弦和余弦(例如,创建旋转矩阵)。当然,我可以像一样一个接一个地分别计算它们a = cos(x); b = sin(x);
,但是我想知道在同时使用两个值时是否有更快的方法。
编辑: 总结到目前为止的答案:
弗拉德说,那是asm命令
FSINCOS
计算这两个(几乎在FSIN
单独调用的同时)像志注意到的那样,这种优化有时已经由编译器完成(使用优化标志时)。
caf指出,函数
sincos
和sincosf
可能是可用的,可以通过直接包括math.h
关于使用查找表的 tanascius方法存在争议。(但是,在我的计算机上和在基准测试情况下,它的运行速度比以前快3倍
sincos
32位浮点的精度几乎。)乔尔·古德温(Joel Goodwin)链接了一种极快的近似技术的有趣方法,具有很高的准确度(对我来说,这比查表还要快)
sinx ~ x-x^3/6
并cosx~1-x^2/4
作为近似值。您可以在任何一个系列中添加术语,因为您更加注重准确性(en.wikipedia.org/wiki/Taylor_series向下滚动到trig taylor系列)n
。因此,如果您具有正弦和余弦所属的更大的函数,那么如果您近似地估计它而不是正弦的余弦,您将获得更大的速度。
x
x_0
x_0
x_0
0