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

Dom*_*c K 20 trigonometry

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

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

Sco*_*ith 18

昂贵是一个相对的术语.

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

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

所有这些发生得非常快,所以"昂贵"取决于你需要做多少,以及你需要多快发生.

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

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

  • 实际上,平方根是如此普遍,以至于它经常在硬件中实现。对于更复杂的功能(例如触发),在硬件中实现它们并没有太大的优势,尽管它确实发生在某些架构中(x87 将是最著名的) (2认同)
  • @slacker - 当你说"在硬件中"的意思是暗示FSQRT是少量的时钟周期,或者你只是意味着它是一条指令并用纳米/微码实现?我知道有平方根功能的硬件设计,但我不认为它们在大多数处理器中. (2认同)

Jef*_*dge 12

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

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

  • 实际上,这是过时的信息.这些天FP增加需要3-4个周期,FP乘法4-5个周期,具体取决于处理器.请注意,这些操作是完全流水线操作的,因此您可以在每个时钟周期开始新的加法和乘法运算.划分通常需要20-25个周期,而不是流水线.如果除数合理地为圆形,则较新的处理器也可以在分裂的早期挽救 - 在某些情况下只需要6个周期. (10认同)
  • 除非你在谈论奔腾4,否则它的速度会很慢.咄. (2认同)

Cod*_*ain 7

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

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

请看下表精确到1度.

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

  • @KennyTM:那不对.它们*比整数运算慢,但不是那么多.在典型的现代CPU上,浮点加法通常需要3个时钟周期.sin()函数需要大约200个周期(取决于CPU和方法).我希望你看到一个区别? (3认同)
  • 要添加另一个皱纹,请考虑查找时间取决于项目是否在缓存中.通常它不会,这意味着查找将占用RAM访问的全部时间 - 这也将是许多时钟周期.您可能会发现浮点指令比查找更快. (3认同)
  • 所有浮点运算都非常昂贵.偶数+涉及相当多的比较,整数加法和位移.当然比罪恶,cos,棕褐色便宜得多. (2认同)