В математике таблицы тригонометрических функций полезны во многих областях. До появления карманных калькуляторов, тригонометрические таблицы были необходимы для навигации, науки и инженерии. Вычисление математических таблиц было важной областью исследования, которая привела к разработке первых механических вычислительных устройств.
Современные компьютеры и карманные калькуляторы теперь генерируют значения тригонометрических функций по запросу, используя специальные библиотеки математического кода. Часто эти библиотеки используют предварительно рассчитанные таблицы для внутреннего использования и вычисляют требуемое значение с помощью соответствующего метода интерполяции. Интерполяция простых справочных таблиц тригонометрических функций все еще используется в компьютерной графике, где может потребоваться лишь умеренная точность, а скорость часто имеет первостепенное значение.
Еще одно важное применение тригонометрических таблиц и схем генерации - это алгоритмы быстрого преобразования Фурье (БПФ), в которых одни и те же значения тригонометрических функций (называемые коэффициентами вращения) должны оцениваться много раз в заданном transform, особенно в общем случае, когда вычисляется много преобразований одного размера. В этом случае вызов универсальных библиотечных подпрограмм каждый раз является неприемлемо медленным. Один из вариантов - вызвать библиотечные подпрограммы один раз, чтобы построить таблицу тех тригонометрических значений, которые потребуются, но это требует значительного объема памяти для хранения таблицы. Другая возможность, поскольку требуется регулярная последовательность значений, заключается в использовании формулы повторения для вычисления тригонометрических значений на лету. Значительные исследования были посвящены поиску точных, стабильных схем повторения, чтобы сохранить точность БПФ (которое очень чувствительно к тригонометрическим ошибкам).
Современные компьютеры и калькуляторы используют различные методы для получения значений тригонометрических функций по запросу для произвольных углов (Кантабутра, 1996). Один из распространенных методов, особенно на процессорах более высокого уровня с блоками с плавающей запятой, состоит в объединении полиномиального или рационального приближения (например, как приближение Чебышева, наилучшее равномерное приближение и приближение Паде, и, как правило, для более высокой или переменной точности, ряд Тейлора и ряд Лорана ) с уменьшение диапазона и поиск в таблице - сначала они ищут ближайший угол в небольшой таблице, а затем используют полином для вычисления поправки. Однако сохранение точности при выполнении такой интерполяции нетривиально; и для этой цели можно использовать такие методы, как точные таблицы Гала, редукция Коди и Уэйта и алгоритмы редукции Пейна и Ханека. На более простых устройствах, в которых отсутствует аппаратный умножитель , существует алгоритм под названием CORDIC (а также связанные с ним методы), который более эффективен, поскольку использует только сдвиги. и дополнения. Все эти методы обычно реализуются в аппаратном обеспечении из соображений производительности.
Конкретный многочлен, используемый для аппроксимации триггерной функции, генерируется заранее с использованием некоторой аппроксимации алгоритма минимаксного приближения.
Для вычислений с очень высокой точностью, когда разложение в ряд сходимость становится слишком медленной, тригонометрические функции могут быть аппроксимированы средним арифметико-геометрическим, которое само аппроксимирует тригонометрическую функцию (комплексным ) эллиптическим интегралом (Brent, 1976).
Тригонометрические функции углов, которые рационально кратны 2π, являются алгебраическими числами. Значения для a / b · 2π могут быть найдены путем применения тождества де Муавра для n = a к ab корню из единицы, который также является корнем многочлена x - 1 в комплексная плоскость. Например, косинус и синус 2π ⋅ 5/37 являются действительными и мнимыми частями, соответственно, 5-й степени корня 37-й степени из единицы cos (2π / 37) + sin (2π / 37) i, который является корнем полинома x - 1 степени степени -37. В этом случае алгоритм поиска корня, такой как метод Ньютона, намного проще, чем описанные выше алгоритмы вычисления среднего арифметико-геометрического, но сходятся с такой же асимптотической скоростью. Однако последние алгоритмы требуются для трансцендентных тригонометрических констант.
Исторически самым ранним методом вычисления тригонометрических таблиц и, вероятно, наиболее распространенным до появления компьютеров, было многократное применение полуугловой формулы. угол и сложение углов тригонометрические тождества, начиная с известного значения (например, sin (π / 2) = 1, cos (π / 2) = 0). Этот метод использовался древним астрономом Птолемеем, который вывел их в Альмагест, трактат по астрономии. В современной форме полученные им тождества сформулированы следующим образом (знаки определяются квадрантом, в котором находится x):
Они были использованы для построения таблицы аккордов Птолемея, которая применялась к астрономическим задачам.
Возможны различные другие перестановки этих тождеств: например, в некоторых ранних тригонометрических таблицах использовались не синус и косинус, а синус и версия.
Быстрый, но неточный алгоритм расчета таблицы из N приближений s n для sin (2π n / N) и c n для cos (2πn / N) равно:
для n = 0,..., N - 1, где d = 2π / N.
Это просто метод Эйлера для интегрирования дифференциального уравнения :
с начальными условиями s (0) = 0 и c (0) = 1, аналитическое решение которого - s = sin (t) и c = cos (t).
К сожалению, это бесполезный алгоритм для создания таблиц синусов, поскольку он имеет значительную ошибку, пропорциональную 1 / N.
Например, для N = 256 максимальная ошибка значений синуса составляет ~ 0,061 (s 202 = -1,0368 вместо -0,9757). Для N = 1024 максимальная ошибка значений синуса составляет ~ 0,015 (s 803 = -0,99321 вместо -0,97832), что примерно в 4 раза меньше. Если бы полученные значения синуса и косинуса были нанесены на график, этот алгоритм нарисовал бы логарифмическую спираль, а не круг.
Простая формула повторения для создания тригонометрических таблиц основана на формуле Эйлера и соотношении:
Это приводит к следующему повторению для вычисления тригонометрических значений s n и c n, как указано выше:
для n = 0,..., N - 1, где w r = cos (2π / N) и w i = sin (2π / N). Эти два начальных тригонометрических значения обычно вычисляются с использованием существующих библиотечных функций (но также могут быть найдены, например, с помощью метода Ньютона в комплексной плоскости для нахождения примитива корень из z - 1).
Этот метод будет создавать точную таблицу в точной арифметике, но имеет ошибки в арифметике с конечной точностью с плавающей запятой. Фактически, ошибки растут как O (ε N) (как в худшем, так и в среднем случае), где ε - точность с плавающей запятой.
Значительным улучшением является использование следующей модификации вышеизложенного, трюка (из-за Синглтона, 1967), часто используемого для генерации тригонометрических значений для реализаций БПФ:
где α = 2 sin (π / N) и β = sin (2π / N). Погрешности этого метода намного меньше, O (ε √N) в среднем и O (ε N) в худшем случае, но этого все еще достаточно, чтобы существенно ухудшить точность БПФ больших размеров.