Быстрая реализация / аппроксимация функции pow () в C / C ++

Я ищу более быструю реализацию или хорошую аппроксимацию функций, предоставляемых cmath .

Мне нужно ускорить выполнение следующих функций:

  1. pow(x,y)
  2. exp(z*pow(x,y))

где z<0 . x от (-1,0,1,0) и y от (0,0, 5,0)

Вот некоторые утверждения:

  • Оптимизированная сильная аппроксимация для Java и C / C ++ . Это приближение очень неточно, вы должны попробовать себя, если это достаточно хорошо.
  • Оптимизированные экспоненциальные функции для Java . Достаточно хорошо! Я использую его для нейронной сети.

Если приведенное выше приближение для pow не достаточно хорошо, вы все равно можете попытаться заменить его экспоненциальными функциями, в зависимости от вашего компьютера и компилятора это может быть быстрее:

  1. x^y = e^(y*ln(x))
  2. И результат: e^(z * x^y) = e^(z * e^(y*ln(x)))

Другой трюк заключается в том, что некоторые параметры формулы часто не меняются. Поэтому, если, например, x и y в основном постоянны, вы можете предварительно вычислить x ^ y и повторно использовать это.

Каковы возможные значения x и y? Если они находятся в разумных пределах, может помочь создание некоторых таблиц поиска.

Я рекомендую подпрограммы в книге «Математический инструментарий для программирования в реальном времени» Джека У. Креншоу.

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