代码之家  ›  专栏  ›  技术社区  ›  Dominic K

三角学计算起来贵吗?

  •  20
  • Dominic K  · 技术社区  · 16 年前

    我在某篇文章中读到,三角计算通常很昂贵。这是真的吗?如果是这样,那就是为什么他们使用三角查找表的原因,对吗?

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

    8 回复  |  直到 15 年前
        1
  •  18
  •   Scott Smith    16 年前

    昂贵是一个相对的术语。

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

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

    这些天发生得很快,所以 “贵” 这取决于你需要做多少,以及你需要多快才能实现。

    如果您正在编写实时3D渲染软件,那么您可能需要使用许多巧妙的数学技巧和快捷方式来从环境中挤出每一点速度。

    如果您正在处理典型的业务应用程序,那么很可能您正在进行的数学计算不会对系统的整体性能产生显著的影响。

        2
  •  11
  •   Jeffrey L Whitledge    16 年前

    在英特尔x86处理器上,浮点加减运算需要6个时钟周期,乘法运算需要8个时钟周期,除法运算需要30-44个时钟周期。但是余弦需要180到280个时钟周期。

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

        3
  •  7
  •   Codebrain    16 年前

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

    权衡的关键在于准确性和记忆力。对准确性的需求越大,查找表所需的内存量就越大。

    看下表,精确到1度。

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

        4
  •  2
  •   Ron Warholic    16 年前

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

    如果您正在编写一个程序,只需要每秒调用几次,那么到目前为止,内置函数已经足够快了。

        5
  •  2
  •   Mark Ransom    16 年前

    我建议你写一个测试程序,并为自己安排时间。是的,它们比加和减慢,但它们仍然是单处理器指令。它不太可能是一个问题,除非你在数百万次迭代中做了一个非常紧密的循环。

        6
  •  2
  •   Seth    16 年前

    是的,(相对于其他数学运算,乘法、除法):如果你在做实时的事情(矩阵运算、电子游戏等),你可以取消 太多了 把你的三角计算移出你的内环。

    如果你不做实时的事情,那么不,它们并不昂贵(相对于从磁盘读取大量数据、生成网页等操作而言)。trig操作有望在硬件上由CPU完成(它可以每秒执行数十亿个浮点操作)。

        7
  •  1
  •   ram    16 年前

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

        8
  •  0
  •   Midhat    16 年前

    是的。三角函数是通过求和一个级数来计算的。所以一般来说,它比一个简单的数学运算要昂贵得多。SQRT也是如此