trig功能的计算成本

时间:2010-10-01 19:01:49

标签: math optimization trigonometry

  

可能重复:
  How do Trigonometric functions work?

实际上,Sin,Cos,Tan和Atan等三角函数的计算是什么?

我想我已经在我的代码中找到了一个优化,我可以避免使用任何这些函数,并将问题基于斜率而不是角度。这意味着代替上述trig函数的一对除法运算。但我想更多地了解那些触发函数的内容,以便我可以比较我的新代码(从基本数学运算的数量的角度来看)。或许我刚刚发现了一种更迂回的做同样事情的方式,或者更糟糕的是,引入了一种效率较低的方法。

使用C ++和Python,但我认为这些与语言无关,数学运算成本与最基本的操作相关。

8 个答案:

答案 0 :(得分:9)

您需要分析您的代码!

您需要自己剖析一下。根据我的结果,触发功能大约需要100 ns,分​​割大约需要20 ns。这可以很容易地转换为答案。但同样,最重要的是你在硬件上进行了分析。这样,您就可以获得适合您系统的正确答案和知识。

答案 1 :(得分:7)

现代x86处理器在其指令集中包含trig函数,但它们需要很多周期才能执行。所以如果你在这样的处理器上,如果你的代码中没有依赖关系(即你不需要一次罪计算的结果来启动下一个),那么你可能不会比直接使用sin和cos快得多,因为它们将完全流水线化,实现每个周期1的有效速率。

答案 2 :(得分:2)

(这最初是对codekaizen的答案的评论,但它相当长......)

  
    

(Codekaizen):如今,大多数trig函数都被实现为查找表。

  

嗯..由于大多数trig函数都采用双精度参数,因此查找该值是不切实际的。我相信大多数都会查找两边的整数然后从那里进行插值(即Sin(5.279)从Sin(5)到Sin(6)的路径是27.9%)。直接计算价值的工作量较少,但仍有相当多的计算量。

答案 3 :(得分:0)

如今,大多数trig函数都被实现为查找表。

答案 4 :(得分:0)

我从三角函数中获得的经验是它们非常快,并且大多数实现为lookup tables ......也就是说,有几个部门和分区零检查可能比调用三角函数要慢。

答案 5 :(得分:0)

唯一真正的答案是“个人资料。”

最有可能的是,如果这不是代码中的瓶颈,那么它将没有任何明显的区别。

答案 6 :(得分:0)

看看glibc。它使用了几种不同的实现,其中一些(如sysdeps / ieee754 / s_sin.c)看起来非常复杂,而其他实现使用汇编指令(如sysdeps / x86_64 / fpu / s_sincos.S)。没有一些测量就很难说出所需的实际时间。

答案 7 :(得分:0)

用于评估三角函数的近似最优方法(以及通常使用的方法)是通过正交多项式展开(Chebyshev系列)。这样一个具有适当数量的项的序列将比表查找更快。

http://en.wikipedia.org/wiki/Chebyshev_polynomials