Я ищу более быструю реализацию или хорошее приближение функций, предоставляемых cmath.
cmath
Мне нужно ускорить следующие функции
pow(x,y)
exp(z*pow(x,y))
, где z<0. x от (-1,0,1,0) и y от (0,0, 5,0)
z<0
x
y
Вот некоторые приближения:
Если приведенное выше приближение для pow недостаточно, вы все равно можете попробовать заменить его экспоненциальными функциями, в зависимости от вашей машины и компилятора это может быть быстрее:
x^y = e^(y*ln(x))
e^(z * x^y) = e^(z * e^(y*ln(x)))
Другая хитрость - это когда некоторые параметры формулы меняются не часто. Так, например, если x и y в основном постоянны, вы можете предварительно рассчитать x ^ y и использовать это снова.
Каковы возможные значения х и у? Если они находятся в разумных пределах, может помочь создание некоторых справочных таблиц.
Я рекомендую процедуры в книге "Математический инструментарий для программирования в реальном времени" Джеком В. Креншоу.
Возможно, вы также захотите опубликовать часть своего кода, чтобы показать, как вы вызываете эти функции, поскольку могут быть некоторые другие возможности оптимизации более высокого уровня, которые не очевидны из приведенного выше описания.