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

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

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


person TheEquah    schedule 13.05.2016    source источник


Ответы (1)


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

Однако вы можете приблизить их.

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

Здесь находится страница руководства.


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


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

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

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

person Margaret Bloom    schedule 13.05.2016