我在我的程序中计算了很多cos(x)
。在Fortran中使用cos(x)
或计算sqrt(1-sin(x)**2)
更有效率吗?如果sqrt
方法更有效,我会牺牲任何准确性吗?而且,我想,sqrt
更有效率是最重要的问题。我能指望编译器正在识别它并为我改变它吗?
答案 0 :(得分:2)
首先要注意的是,您必须小心选择sqrt(1 - sin(x)**2)
的正确根,否则您将面临评估|cos(x)|
的风险,这是不一样的。这本身就增加了复杂性。
使用cos(x)
,因为您应该避免这种微观优化:您可以轻松击败现代FORTRAN编译器采用的任何优化方法。
即使我使用FORTRAN,聪明的FORTRAN编译器也会使用芯片组上提供的trig功能。 sqrt
整体上仍采用Newton-Raphson型算法实现,其评估需要花费少量时钟周期。
我的预感是,最新的编译器将为您反转您的身份并替换cos(x)
:检查输出程序集。
但如果您有任何疑问,请进行描述。