正弦和余弦哪个更有效?罪与科斯或罪与方
Which is more efficient for sines and cosines? Sin and Cos or Sin and Sqrt?
不幸的是,标准的C++库没有对sincos的单一调用,这为这个问题提供了一席之地。
第一个问题:
如果我想计算一个罪和一个 cos,计算一个罪和一个 cos 更便宜,还是计算一个罪比 sqrt(1-sin^2) 得到 cos 更便宜?
第二个问题:
英特尔数学内核库为标准数学函数计算提供了非常好的函数,因此存在一个函数 vdSinCos() 以非常优化的方式解决问题,但英特尔编译器不是免费的。Linux发行版中是否有任何开源库(C,C++,Fortran)具有这些功能,我可以简单地链接到它们并获得最佳实现?
注意:我不想进入指令调用,因为并非所有 CPU 都支持它们。我想链接到一个通用库,它可以在任何 CPU 上为我完成这项工作。
谢谢。
GNU C 库有一个 sincos() 函数,它将利用大多数现代指令集具有的"FSINCOS"指令。我会说这是你最好的选择;它应该与英特尔库方法一样快。
如果你不这样做,我会选择"sqrt(1-sin(x)^2)"路线。到目前为止,在我看过的每个处理器架构文档中,FSQRT 指令都比 FSIN 函数快得多。
几乎所有性能问题的答案都是"为什么不在代码中测量它",因为有大量不同的因素会影响几乎任何此类计算的性能。例如,"谁产生数学函数"。平方根的计算相对简单,但我不相信这是sqrt(1-sin*sin)
和再次计算cos
之间的巨大差异。什么处理器也可能是一个因素,以及围绕 sin/cos 计算"进行的其他计算。
如果某个地方有一个具有这种功能的图书馆,我不会感到惊讶,但我没有寻找。
如果精度不重要,那么获得 sin 或 cos 的最快方法是使用表格。持有一些全局常量数组,其中包含所有 agle 的 sin 和 cos 值,并提供您需要的步骤。所以你的sin/cos函数只需要将角度转换为索引,你就会得到结果。
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- 我应该将哪种有效负载类型发送给webrtc::P ayloadRouter的构造函数?
- 在 OpenGL 中渲染对象的哪种方式更有效
- 在C/C++中存储字符串、数组和指针,哪种方法更有效
- 库特 << 2[ "abc" ] << endl;为什么它有效?这是哪种语法?
- 在哪种方式搜索容器中的元素的方式更有效
- 哪种情况更有效
- 两种数字比较方法中哪一种更有效
- 对于虚拟机,哪种调度方法更有效
- 在 D3D11 的图形管道中放置内容的哪种方法更有效
- 遍历数组的简单任务.以下哪种解决方案最有效
- 正弦和余弦哪个更有效?罪与科斯或罪与方
- isSubstringOf()的哪种方法更有效
- Unicode字符或多字节字符:哪种类型更有效?为什么
- 在没有节点类的情况下,哪种数据结构对DAG最有效
- Matlab 计算与'C/C++'计算..哪一个是有效的?
- 哪种沟通方式更有效