一起计算正弦和余弦的最快方法是什么?

我想同时计算一个值的正弦和余弦(例如,创建旋转矩阵)。当然,我可以像一样一个接一个地分别计算它们a = cos(x); b =

sin(x);,但是我想知道在同时使用两个值时是否有更快的方法。

总结到目前为止的答案:

  • [弗拉德] 说,有一个asm命令可以FSINCOS计算两者(几乎是在FSIN单独调用时)

  • 就像[ Chi所] 注意到的那样,这种优化有时已经由编译器完成(使用优化标志时)。

  • [caf] 指出,函数sincossincosf可能是可用的,可以通过仅包括以下内容直接调用math.h

  • __]使用查找表的 tanascius 方法存在争议。(但是,在我的计算机上和在基准测试情况下,它的运行速度比sincos32位浮点的精度几乎快3倍。)

  • 乔尔·古德温(Joel Goodwin) 关联了一种极快的近似技术的有趣方法,具有很高的准确度(对我来说,这比查表还要快)

回答:

现代的Intel / AMD处理器具有FSINCOS用于同时计算正弦和余弦函数的指令。如果需要强大的优化,也许应该使用它。

这是一个小示例:http :

//home.broadpark.no/~alein/fsincos.html

这是另一个示例(用于MSVC):http

:

//www.codeguru.com/forum/showthread.php?

t=328669

这是另一个示例(带有gcc):http :

//www.allegro.cc/forums/thread/588470

希望其中之一能有所帮助。(抱歉,我自己没有使用此指令。)

由于它们在处理器级别受支持,因此我希望它们比表查找要快得多。

编辑:

Wikipedia建议FSINCOS在387个处理器中添加该处理器,因此您几乎找不到不支持该处理器的处理器。

编辑:

英特尔的文档指出,该FSINCOS速度仅比FDIV(即浮点除法)慢5倍。

编辑:

请注意,并非所有现代编译器都会将sine和cosine的计算优化为对的调用FSINCOS。特别是我的VS 2008并不是那样。

编辑:

第一个示例链接已失效,但WaybackMachine上仍有一个版本。

以上是 一起计算正弦和余弦的最快方法是什么? 的全部内容, 来源链接: utcz.com/qa/407342.html

回到顶部