Есть ли какое-то преимущество в ограничении угла, передаваемого тригонометрическим функциям? - PullRequest
3 голосов
/ 07 сентября 2011

Мне было интересно, было ли какое-либо преимущество в ограничении угла, передаваемого тригонометрическим функциям, между 0 и Math.PI * 2? У меня была функция, которая интенсивно использовала тригонометрические функции, и кто-то в проекте добавил это в начало:

angle %= Math.PI * 2;

Есть ли в этом преимущество? Являются ли тригонометрические функции быстрее, если угол между этими значениями? Если так, разве они не должны зажать это сами? Есть ли другой случай, когда эквивалентные углы должны быть зажаты?

Язык JavaScript, скорее всего, будет работать на V8 и SpiderMonkey.

Ответы [ 2 ]

7 голосов
/ 07 сентября 2011

Поскольку большинство (встроенных) алгоритмов для вычисления тригонометрических функций используют какой-либо вариант CORDIC , я уверен, что эти значения в любом случае оказываются зажатыми в пределах [0, Pi / 2) в точке входавызов функции trig.

При этом, если у вас есть способ держать углы близкими к нулю на протяжении всего алгоритма, это, вероятно, разумно сделать это.Действительно, значение sin (10 ^ 42) в значительной степени не определено, поскольку степень детализации в диапазоне 10 ^ 42 составляет около 10 ^ 25.

Это означает, например, что если вы хотите добавить углы, иесли при этом они могут стать большими по величине, то вам следует периодически их зажимать.Но нет необходимости зажимать их непосредственно перед вызовом тригонометрической функции.

0 голосов
/ 07 июня 2014

Преимущество углов зажима в диапазоне от -pi / 4 до pi / 4 (используйте синус или косинус в зависимости от ситуации) заключается в том, что вы можете гарантировать, что если углы вычисляются с использованием некоторого приближения числа pi, уменьшение диапазона выполняется с использованием в том же приближении .Такой подход будет иметь два преимущества: он улучшит точность таких вещей, как синус 180 градусов или косинус 90 градусов, и позволит избежать потери математических библиотек в вычислительных циклах в попытке выполнить сверхточное уменьшение диапазона за счет«более точное» приближение числа пи, которое не совпадает с используемым при вычислении углов.

Рассмотрим, например, синус 2ine * пи.Лучшее double приближение числа пи, умноженное на 2 ^ 48, равно 884279719003555, что также является наилучшим двойным приближением 2⁴⁸π.Фактическое значение 2⁴⁸π составляет 884279719003555.03447074.При уменьшении по модулю наилучшего двойного приближения предыдущее значение с помощью наилучшего двойного приближения pi даст ноль, синус которого равен правильному синусу 2⁴⁸π.Уменьшение мода на π, значение, увеличенное в лучшем приближении к пи, даст -0,03447074, синус которого равен -0,03446278.

...