限制传递给三角函数的角度有什么好处吗?

时间:2011-09-07 15:12:20

标签: javascript math optimization trigonometry

我想知道在0Math.PI * 2之间夹住传递给三角函数的角度是否有任何优势?我有一个大量使用三角函数的函数,项目中的某个人将这个添加到了开头:

angle %= Math.PI * 2;

这有什么好处吗?如果角度超过这些值,三角函数会更快吗?如果是这样,他们不应该自己夹住它吗?还有其他情况应该夹紧等效角度吗?

语言是JavaScript,最有可能在V8和SpiderMonkey上运行。

2 个答案:

答案 0 :(得分:7)

由于用于计算三角函数的大多数(on-die)算法使用CORDIC的某种变体,我的赌注是这些值在[0,Pi / 2]内被限制在任何位置的触发点功能调用。

话虽如此,如果你有办法在整个算法中保持角度接近于零,那么这样做可能是明智之举。实际上,sin(10 ^ 42)的值几乎未定义,因为10 ^ 42范围内的粒度大约为10 ^ 25。

这意味着,例如,如果要添加角度,如果这样做,它们可能会变大,那么您应该考虑定期夹紧它们。但是在三角函数调用之前将它们钳制是不必要的。

答案 1 :(得分:0)

夹角在-pi / 4到pi / 4范围内(适当时使用正弦或余弦)的优点是,如果使用pi的近似值计算角度,则可以确保使用< em>相同的近似值。这种方法有两个好处:它可以提高180度正弦或90度余弦等精度,并且可以避免数学库浪费计算周期,以便通过以下方式执行超精确的范围缩小。 pi的“更精确”近似值与计算角度时使用的近似值不相符。

例如,考虑2⁴⁸* pi的正弦值。 pi的最佳double近似值,乘以2 ^ 48,是884279719003555,这恰好也是2⁴⁸π的最佳双近似。 2⁴⁸π的实际值是884279719003555.03447074。通过pi的最佳双近似,将前一个值的最佳双近似值降低,将产生零,其正弦等于2π的正确正弦。通过π的最小近似值减小π的值将产生-0.03447074,其正弦值为-0.03446278。