Как Тригонометрические функции работают?

99
задан Eric Wilson 28 June 2012 в 12:17
поделиться

5 ответов

Во-первых, необходимо сделать своего рода сокращение диапазона. Аккуратные функции являются периодическими, таким образом, необходимо уменьшить аргументы вниз стандартному интервалу. Для начала, Вы могли уменьшить углы, чтобы быть между 0 и 360 градусов. Но при помощи нескольких идентификационных данных, Вы понимаете, что могли обойтись меньше. При вычислении синусов и косинусов для углов между 0 и 45 градусов можно загрузить путь к вычислению всех аккуратных функций для всех углов.

, После того как Вы уменьшили свой аргумент, большинство микросхем использует алгоритм CORDIC для вычислений синусов и косинусов. Можно услышать, что люди говорят тот, компьютеры используют Ряд Тейлора. Это звучит разумным, но это не верно. Алгоритмы CORDIC намного лучше подходят эффективный аппаратные средства реализация. ( программное обеспечение библиотеки могут использовать Ряд Тейлора, заявить относительно аппаратных средств, которые не поддерживают аккуратные функции.) Может быть некоторая дополнительная обработка, использование алгоритма CORDIC для получения довольно хороших ответов, но затем выполнения чего-то еще для улучшения точности.

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

141
ответ дан John D. Cook 24 November 2019 в 05:02
поделиться

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

14
ответ дан Jon Galloway 24 November 2019 в 05:02
поделиться

редактирование: у Jack Ganssle есть достойное обсуждение в его книге по встроенным системам, "Микропрограммное Руководство" .

к вашему сведению: Если у Вас есть точность и ограничения производительности, Ряд Тейлора должен не , используются для приближения функций в числовых целях. (Сохраните их для своих курсов Исчисления.) Они используют аналитичность из функции в единственной точке , например, то, что все его производные существуют в той точке. Они не обязательно сходятся в интервале интереса. Часто они делают паршивое задание распределения точности функционального приближения, чтобы быть "идеальным" правом около точки оценки; ошибка обычно масштабирует вверх, поскольку Вы убегаете от нее. И если у Вас будет функция с какой-либо ненепрерывной производной (например, прямоугольные волны, треугольные волны и их интегралы), Ряд Тейлора даст Вам неправильный ответ.

лучшее "легкое" решение, при использовании многочлена максимального градуса N для приближения заданной функции f (x) по интервалу x0 < x < x1, от Чебышевское приближение ; см. Числовые Рецепты для хорошего обсуждения. Обратите внимание, что Tj(x) и Tk(x) в статье Wolfram, которую я связал с используемым, потому что и обратный косинус, это многочлены и на практике Вы используете формулу повторения для получения коэффициентов. Снова, см. Числовые Рецепты.

редактирование: Википедия имеет полудостойную статью о теория приближения. Один из источников, которые они цитируют (Hart, "Компьютерные Приближения") распродано (& используемые копии имеют тенденцию быть дорогими), но вдается в большое количество подробностей о материале как это. (Jack Ganssle упоминает это обсуждаемые 39 из его новостной рассылки Встроенная муза .)

редактирование 2: вот некоторые материальные ошибочные метрики (см. ниже) для Taylor по сравнению с Чебышевым для sin (x). Некоторые важные моменты для замечания:

  1. , что максимальная погрешность приближения Ряда Тейлора по данному диапазону, намного больше, чем максимальная погрешность Чебышевского приближения того же градуса. (Приблизительно для той же ошибки можно сойти с рук та меньше термина с Чебышевым, что означает более быструю производительность)
  2. , сокращение Диапазона является огромной победой. Это вызвано тем, что вклад многочленов высшего порядка уменьшается вниз, когда интервал приближения меньше.
  3. , Если Вам не может сойти с рук сокращение диапазона, Ваши коэффициенты должны быть снабжены большей точностью.

не понимают меня превратно: Ряд Тейлора будет работать правильно на синус/косинус (с разумной точностью для диапазона-pi/2 к +pi/2; технически, с достаточным количеством условий, можно достигнуть любой желаемой точности для всех реальных исходных данных, но попытаться вычислить because(100), использующий Ряд Тейлора, и Вы не можете сделать этого, если Вы не используете арифметику произвольной точности). Если бы я застрял на необитаемом острове с ненаучным калькулятором, и я должен был вычислить синус и косинус, я, вероятно, использовал бы Ряд Тейлора, так как коэффициенты легко помнить. Но приложения реального мира для того, чтобы иметь необходимость записать Вашего собственного sin() или потому что () функции достаточно редки, что Вы были бы лучшими от использования эффективного внедрения для достижения желаемой точности - который Ряд Тейлора не .

Диапазон =-pi/2 к +pi/2, градус 5 (3 условия)

  • Taylor: максимальная погрешность вокруг 4.5e-3, f (x) = x-x <глоток> 3 /6+x <глоток> 5 /120
  • Чебышев: максимальная погрешность вокруг 7e-5, f (x) = 0.9996949x-0.1656700x <глоток> 3 +0.0075134x <глоток> 5

Диапазон =-pi/2 к +pi/2, градус 7 (4 условия)

  • Taylor: максимальная погрешность вокруг 1.5e-4, f (x) = x-x <глоток> 3 /6+x <глоток> 5 /120-x <глоток> 7 /5040
  • Чебышев: максимальная погрешность вокруг 6e-7, f (x) = 0.99999660x-0.16664824x <глоток> 3 +0.00830629x <глоток> 5 -0.00018363x <глоток> 7

Диапазон =-pi/4 к +pi/4, градус 3 (2 условия)

  • Taylor: максимальная погрешность вокруг 2.5e-3, f (x) = x-x <глоток> 3 /6
  • Чебышев: максимальная погрешность вокруг 1.5e-4, f (x) = 0.999x-0.1603x <глоток> 3

Диапазон =-pi/4 к +pi/4, градус 5 (3 условия)

  • Taylor: максимальная погрешность вокруг 3.5e-5, f (x) = x-x <глоток> 3 /6+x <глоток> 5
  • Чебышев: максимальная погрешность вокруг 6e-7, f (x) = 0.999995x-0.1666016x <глоток> 3 +0.0081215x <глоток> 5

Диапазон =-pi/4 к +pi/4, градус 7 (4 условия)

  • Taylor: максимальная погрешность вокруг 3e-7, f (x) = x-x <глоток> 3 /6+x <глоток> 5 /120-x <глоток> 7 /5040
  • Чебышев: максимальная погрешность вокруг 1.2e-9, f (x) = 0.999999986x-0.166666367x <глоток> 3 +0.008331584x <глоток> 5 -0.000194621x <глоток> 7
47
ответ дан Jason S 24 November 2019 в 05:02
поделиться

Выезд статья Wikipedia об аккуратных функциях. Хорошее место для приобретения знаний о фактической реализации их в коде Числовые Рецепты .

, я не большая часть математика, но мое понимание того, где грех, потому что, и загар "прибывают из", то, что они, в некотором смысле, наблюдаются, когда Вы работаете с прямоугольными треугольниками. Если Вы проводите измерения длин сторон набора различных прямоугольных треугольников и выводите точки на печать на графике, можно получить грех, потому что, и загорают из этого. Как Harper Shelby указывает, функции просто определяются как свойства прямоугольных треугольников.

А более сложное понимание достигается путем понимания, как эти отношения касаются геометрии круга, который приводит к радианам и всему тому совершенству. Это - все там в статье в Википедии.

6
ответ дан Parappa 24 November 2019 в 05:02
поделиться

Если Ваша просьба о более физическом объяснении греха, потому что, и загар рассматривают, как они касаются прямоугольных треугольников. Фактическое числовое значение because(лямбды), может быть найден путем формирования прямоугольного треугольника с одним из углов, являющихся лямбдой и делящих длину стороны треугольников, смежной с лямбдой длиной гипотенузы. Так же для греха используют противоположную сторону, разделенную на гипотенузу. Поскольку касательная использует противоположную сторону, разделенную на смежную сторону. Классический memonic для запоминания этого является SOHCAHTOA (объявил socatoa).

-5
ответ дан jeffD 24 November 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: