Cos与Sqrt的表现(1 - Sin()** 2)

时间:2016-12-13 20:20:36

标签: performance optimization fortran sqrt cos

我在我的程序中计算了很多cos(x)。在Fortran中使用cos(x)或计算sqrt(1-sin(x)**2)更有效率吗?如果sqrt方法更有效,我会牺牲任何准确性吗?而且,我想,sqrt更有效率是最重要的问题。我能指望编译器正在识别它并为我改变它吗?

1 个答案:

答案 0 :(得分:2)

首先要注意的是,您必须小心选择sqrt(1 - sin(x)**2)的正确根,否则您将面临评估|cos(x)|的风险,这是不一样的。这本身就增加了复杂性。

使用cos(x),因为您应该避免这种微观优化:您可以轻松击败现代FORTRAN编译器采用的任何优化方法。

即使我使用FORTRAN,聪明的FORTRAN编译器也会使用芯片组上提供的trig功能。 sqrt整体上仍采用Newton-Raphson型算法实现,其评估需要花费少量时钟周期。

我的预感是,最新的编译器为您反转您的身份并替换cos(x):检查输出程序集。

但如果您有任何疑问,请进行描述。