Тригонометрические функции в псевдокоде

Я ищу тригонометрические функции в псевдокоде. Я не очень хорошо разбираюсь в математике, поэтому я мало что могу сделать с формулами в Википедии. В основном я ищу синус, косинус, тангенс и обратные функции (sin⁻¹, cos⁻¹, tan⁻¹) из них. Есть и другие тригонометрические функции. Но для меня вышесказанное является наиболее важным.

Если это возможно, я был бы рад, если в псевдокоде только переменные, for, ifи операторы (+, -, *, /, %, sqrt()), потому что у меня нет библиотеки с расширенными математическими функциями.

1 ответ

Решение

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

Вы можете приблизить их, хотя.

Обычный подход состоит в том, чтобы использовать периодичность и симметрию, чтобы уменьшить угол α и эквивалентный угол α′ так, чтобы sin(α) = sin(α′), но α′. Α.
Проще говоря, вы уменьшаете любой угол и угол в первом квадранте или подобном, это проще, чем кажется.
Получив небольшой угол, вы можете использовать расширение серии Тейлора, чтобы вычислить функцию до фиксированной величины ошибки.

Вот страница учебника.


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


Другой подход заключается в использовании алгоритма CORDIC, он особенно подходит для оборудования, в котором отсутствует поддержка умножения (например, некоторые микросхемы MIPS и ARM). Из Википедии:

CORDIC обычно быстрее, чем другие подходы, когда аппаратный множитель недоступен (например, микроконтроллер) [...]

С другой стороны, когда доступен аппаратный множитель (например, в микропроцессоре DSP), методы поиска в таблице и ряды мощности, как правило, быстрее, чем CORDIC.

Другие вопросы по тегам