Тригонометрические функции в псевдокоде
Я ищу тригонометрические функции в псевдокоде. Я не очень хорошо разбираюсь в математике, поэтому я мало что могу сделать с формулами в Википедии. В основном я ищу синус, косинус, тангенс и обратные функции (sin⁻¹, cos⁻¹, tan⁻¹) из них. Есть и другие тригонометрические функции. Но для меня вышесказанное является наиболее важным.
Если это возможно, я был бы рад, если в псевдокоде только переменные, for
, if
и операторы (+
, -
, *
, /
, %
, sqrt()
), потому что у меня нет библиотеки с расширенными математическими функциями.
1 ответ
Тригонометрические функции трансцендентны.
Вы не можете найти их точное выражение в терминах полиномиальной алгебры.
Вы можете приблизить их, хотя.
Обычный подход состоит в том, чтобы использовать периодичность и симметрию, чтобы уменьшить угол α и эквивалентный угол α′ так, чтобы sin(α) = sin(α′), но α′. Α.
Проще говоря, вы уменьшаете любой угол и угол в первом квадранте или подобном, это проще, чем кажется.
Получив небольшой угол, вы можете использовать расширение серии Тейлора, чтобы вычислить функцию до фиксированной величины ошибки.
Вот страница учебника.
Другой подход заключается в использовании таблицы поиска.
Это особенно полезно, когда вы можете отслеживать требуемую точность процесса и очень быстро.
Однако это занимает больше памяти и может вызвать пошаговую функцию. Здесь вводная страница.
Другой подход заключается в использовании алгоритма CORDIC, он особенно подходит для оборудования, в котором отсутствует поддержка умножения (например, некоторые микросхемы MIPS и ARM). Из Википедии:
CORDIC обычно быстрее, чем другие подходы, когда аппаратный множитель недоступен (например, микроконтроллер) [...]
С другой стороны, когда доступен аппаратный множитель (например, в микропроцессоре DSP), методы поиска в таблице и ряды мощности, как правило, быстрее, чем CORDIC.