三角法在计算上是否昂贵?

时间:2010-03-19 18:01:55

标签: trigonometry

我在一篇文章中读到,三角计算通常很昂贵。这是真的?如果是这样,那就是他们使用trig-lookup表的原因吧?

编辑:嗯,所以如果唯一改变的是度数(精确到1度),那么360条目(每个角度)的查找表会更快吗?

8 个答案:

答案 0 :(得分:18)

昂贵是一个相对的术语。

执行速度最快的数学运算是可由处理器直接执行的运算。当然整数加减也是其中之一。根据处理器的不同,也可能存在乘法和除法。有时,处理器(或协处理器)可以本地处理浮点运算。

更复杂的事情(例如平方根)需要执行一系列这些低级计算。这些东西通常使用数学库(在处理器可以执行的本机操作之上编写)来完成。

这些天所有这些都发生得非常快,所以“昂贵”取决于你需要做多少,以及你需要多快发生。

如果您正在编写实时3D渲染软件,那么您可能需要使用大量聪明的数学技巧和快捷方式来挤出环境中的所有速度。

如果您正在处理典型的商业应用程序,那么您所做的数学计算可能无法显着提高系统的整体性能。

答案 1 :(得分:11)

在Intel x86处理器上,浮点加法或减法需要6个时钟周期,乘法需要8个时钟周期,并且需要30-44个时钟周期。但余弦需要180到280个时钟周期。

它仍然非常快,因为x86在硬件中做这些事情,但它比更基本的数学函数慢得多。

答案 2 :(得分:7)

因为sin(),cos()和tan()是数学函数,通过求和系列开发人员有时会使用查找表来避免昂贵的计算。

权衡取决于准确性和记忆力。对准确性的要求越高,查找表所需的内存量就越大。

请看下表精确到1度。

http://www.analyzemath.com/trigonometry/trig_1.gif

答案 3 :(得分:2)

虽然快速回答是它们比原始数学函数(加法/乘法/减法等)更昂贵,但就人类时间而言,它们并不昂贵。通常人们使用查找表和近似值对它们进行优化的原因是因为它们每秒可能会调用它们数万次,每微秒可能很有价值。

如果您正在编写程序并且只需要每秒调用一次,那么内置函数到目前为止还是足够快。

答案 4 :(得分:2)

我建议您编写测试程序并为自己计时。是的,与正负相比,它们很慢,但它们仍然是单处理器指令。除非你用数百万次迭代进行非常紧密的循环,否则它不太可能是一个问题。

答案 5 :(得分:2)

是的,(相对于其他数学运算相乘,除以):如果你正在做一些实时的事情(矩阵运算,视频游戏,无论如何),你可以通过移动你的周期来解决批次你的内循环中的三角计算。

如果你没有实时做某事,那么不,它们并不昂贵(相对于诸如从磁盘读取大量数据,生成网页等操作而言)。希望由CPU(可以每秒进行数十亿次浮点运算)在硬件中完成Trig操作。

答案 6 :(得分:1)

如果你总是知道你正在计算的角度,你可以将它们存储在一个变量中,而不是每次都计算它们。这也适用于您的方法/函数调用,其中您的角度不会改变。你可以通过使用一些公式(从sin(theta / 2)计算sin(theta),知道值重复的频率 - sin(theta + 2 * pi * n)= sin(theta))和减少计算来变得聪明。请参阅this维基百科文章

答案 7 :(得分:0)

是的,是的。通过对一系列进行求和来计算trig函数。因此,总的来说,它比简单的数学运算成本高得多。同样适用于sqrt