Вычислительная стоимость триггерных функций

Возможный дубликат:
Как работают тригонометрические функции?

Что фактически входит в вычисление триггерных функций, таких как Sin, Cos, Tan и Atan?

Думаю, я нашел оптимизацию в своем коде, где я могу избежать использования любой из этих функций и основывать проблему на склоне вместо углов. Таким образом, это означает, что вместо вышеупомянутых триггерных функций выполняются операции с парами деления. Но я хотел бы узнать больше о том, что входит в эти триггерные функции, чтобы я мог сравнить свой новый код (с точки зрения количества основных математических операций). Или, может быть, я только что нашел более крутой способ сделать то же самое или, что еще хуже, ввести менее эффективный метод.

Использование С++ и Python, но я полагаю, что это довольно язык, агностик с затратами на математическую операцию относительно самых примитивных операций.

Ответы

Ответ 1

Современные процессоры x86 включают триггерные функции в их наборе команд, но они выполняют много циклов для выполнения. Поэтому, если вы находитесь на таком процессоре, и если у вас нет зависимостей в коде (т.е. Вам не нужен результат вычисления одного греха, чтобы начать следующий), то вы, вероятно, не получите гораздо быстрее чем использование sin и cos непосредственно, так как они будут полностью конвейерными, достигая эффективной скорости 1 за цикл.

Ответ 2

Вам необходимо прокомментировать ваш код!

Вам нужно прокомментировать это самостоятельно. Основываясь на моих результатах, триггерные функции занимают около 100 нс и делений около 20 нс. Это может быть легко преобразовано в ответы. Но опять же, самое главное, вы профилируете это на своем оборудовании. Таким образом, вы получите правильные ответы и знания для своей системы.

Ответ 3

(Это был изначально комментарий на кодкайзен, но он получил довольно длинный....)

(Codekaizen): Большинство триггерных функций реализованы в качестве таблиц поиска в эти дни.

um.. Так как большинство триггерных функций принимают аргумент двойной точности, поиск значения не является практическим. Я считаю, что большинство из них ищут целые числа с каждой стороны, а затем интерполируют оттуда (т.е. Sin (5.279) составляет 27.9% от Sin (5) до Sin (6)). Это меньше работы, которая вычисляет значение напрямую, но все равно справедливое количество вычислений.

Ответ 4

Большинство функций-триггеров реализованы в качестве справочных таблиц в эти дни.

Ответ 5

Мой опыт от тригонометрических функций заключается в том, что они чрезвычайно быстрые и большинство из них реализованы как таблицы поиска в любом случае... То есть, несколько делений и деления на нуль проверок, вероятно, будут медленнее, чем вызов тригонометрической функции.

Ответ 6

Единственный реальный ответ, который вы получите, это "Профиль".

Скорее всего, если это не является узким местом в вашем коде, это не будет иметь заметных различий.

Ответ 7

Посмотрите glibc. Он использует несколько различных реализаций, некоторые из них (например, sysdeps/ieee754/s_sin.c) выглядят действительно сложными, в то время как другие используют инструкцию сборки (например, sysdeps/x86_64/fpu/s_sincos.S). Трудно сказать фактическое время, требуемое без каких-либо измерений.

Ответ 8

Ближайший оптимальный метод (и обычно используемый метод) для вычисления тригонометрических функций - через ортогональное многочленное расширение (ряд Чебышева). Такой ряд с соответствующим числом членов будет быстрее, чем поиск в таблице.

http://en.wikipedia.org/wiki/Chebyshev_polynomials