c++ - 正弦和余弦哪个更有效? Sin 和 Cos 还是 Sin 和 Sqrt?

标签 c++ performance optimization sqrt trigonometry

不幸的是,标准 C++ 库没有对 sincos 的单一调用,这为这个问题提供了空间。

第一个问题:

如果我想计算 sin 和 cos,计算 sin 和 cos 更便宜,还是先计算 sin 再计算 sqrt(1-sin^2) 以获得 cos?

第二个问题:

intel 数学内核库为标准数学函数计算提供了非常好的函数,因此存在函数 vdSinCos() 以非常优化的方式解决问题,但 intel 编译器不是免费的。 Linux 发行版中是否有任何开源库(C、C++、Fortran)可用,它们具有我可以简单地链接到它们并获得最佳实现的那些功能?

注意:我不想深入探讨指令调用,因为并非所有 CPU 都支持它们。我想链接到一个通用库,它可以在任何 CPU 上为我完成这项工作。

谢谢。

最佳答案

GNU C 库有 a sincos() function ,它将利用大多数现代指令集所具有的“FSINCOS”指令。我会说那是你最好的选择;它应该与英特尔库方法一样快。

如果您不这样做,我会选择“sqrt(1-sin(x)^2)”路线。到目前为止,在我看过的每个处理器架构文档中,FSQRT 指令都比 FSIN 函数快得多。

关于c++ - 正弦和余弦哪个更有效? Sin 和 Cos 还是 Sin 和 Sqrt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793975/

相关文章:

c++ - 你应该始终在构造函数中保留可选参数吗

c - 具有不同优化级别的 GNU 并行运行 Makefile

c++ - 难以衡量 C/C++ 性能

c++ - 去除重复项的有效方法

c++ - 检查数组是否为 'right' (C++)

javascript - Ractivejs 中的递归部分超出调用堆栈

java - 在方法中使用单个临时变量有好处吗?

php - 为什么要同时使用 str_replace() 和 preg_replace()?

mysql - 如何设计和优化网站的数据库,以便为每个链接提供多个图像功能

c++ - 如何在模板类中拆分模板友元函数的定义?