cos
дорого, особенно 4 подряд.Похоже, вы вычисляете cos (n a + b), где b - это константа, а n - небольшое целое число.Это означает, что вы можете предварительно вычислить cos (b) и sin (b), а во время выполнения вычислить просто cos (hp) и sin (hp).Вы можете получить cos (n a + b), многократно используя
cos(a+b) = cos(a)*cos(b)-sin(a)*sin(b)
. Вы будете торговать парой sin
s и cos
s для некоторых умножений и сложений,почти наверняка стоит.
Вы можете добиться большего успеха, если вы чувствуете себя честолюбивым.Вы получаете hp
косвенно от atan2
.Шаблон trig-function(rational-function(inverse-trig-function(x)))
часто может быть заменен некоторой комбинацией полиномов и корней, которые быстрее оцениваются, чем функции триггера.
Я не знаю, как pow
реализован в Java, но если он использует журналывозможно, вам лучше получить Cp7
, используя Cp2=Cp*Cp;Cp4=Cp2*Cp2;Cp7=Cp4*Cp2*Cp;
Обновление: сейчас я получаю немного более умозрительные рассуждения, поскольку у меня нет времени на самом деле переписать код.Оптимизация энергопотребления и оптимизация триггера - фактически замаскированная вещь!Оптимизация триггера является версией оптимизации мощности, применяемой к комплексным числам.Более того, строка
double dH = 2 * Math.sqrt(CpProd) * Math.sin(dhp / 2);
является частью операции с квадратным корнем из комплексного числа.Это заставляет меня думать, что большая часть этого кода может быть написана для использования комплексных чисел, исключая почти все триггерные функции.Я не знаю, какова ваша арифметика комплексного числа ...