一起计算正弦和余弦的最快方法是什么?
我想同时计算一个值的正弦和余弦(例如,创建旋转矩阵)。当然,我可以像一样一个接一个地分别计算它们a = cos(x); b =
sin(x);,但是我想知道在同时使用两个值时是否有更快的方法。
总结到目前为止的答案:
[弗拉德] 说,有一个asm命令可以
FSINCOS
计算两者(几乎是在FSIN
单独调用时)就像[ Chi所] 注意到的那样,这种优化有时已经由编译器完成(使用优化标志时)。
[caf] 指出,函数
sincos
和sincosf
可能是可用的,可以通过仅包括以下内容直接调用math.h
__]使用查找表的 tanascius 方法存在争议。(但是,在我的计算机上和在基准测试情况下,它的运行速度比
sincos
32位浮点的精度几乎快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