# Tablas trigonométricas

En matemáticas, las tablas de funciones trigonométricas son útiles en varias áreas. Antes de la existencia de las calculadoras de bolsillo, las tablas trigonométricas eran esenciales para la navegación, la ciencia y la ingeniería. El cálculo de las tablas matemáticas fue un área de estudio importante, que condujo al desarrollo de los primeros dispositivos de computación mecánica.
En este artículo se describen resumidamente las técnicas de programación y los algoritmos informáticos que permiten calcular los valores de funciones trigonométricas de gran precisión que requieren algunos cálculos matemáticos. Para las tradicionales tablas impresas en papel, véase el artículo Tabla matemática.

## Introducción

Las computadoras modernas y las calculadoras de bolsillo ahora generan valores de funciones trigonométricas de forma inmediata, utilizando bibliotecas especiales de código matemático. A menudo, estas bibliotecas usan tablas precalculadas internamente y obtienen el valor requerido mediante el uso de un método de interpolación apropiado. La interpolación de tablas de búsqueda simples de funciones trigonométricas todavía se usa en gráficos de computadora, donde solo se requiere una precisión modesta y la velocidad a menudo es primordial.
Otra aplicación importante de las tablas trigonométricas y de los esquemas de generación es para los algoritmos de la transformada rápida de Fourier (TRF), donde los mismos valores de una función trigonométrica (los llamados factores twiddle) deben evaluarse muchas veces en una transformación dada, especialmente en el caso común donde se calculan muchas transformaciones del mismo tamaño. En este caso, llamar a rutinas genéricas de la biblioteca cada vez es inaceptablemente lento. Una opción es llamar a las rutinas de la biblioteca una vez, para construir una tabla de los valores trigonométricos que se necesitarán, pero esto requiere una memoria considerable para almacenar la tabla. La otra posibilidad, dado que se requiere una secuencia regular de valores, es usar una fórmula de recurrencia para calcular los valores trigonométricos sobre la marcha. Se han dedicado importantes investigaciones para encontrar esquemas de recurrencia precisos y estables para preservar la precisión de la FFT (que es muy sensible a los errores trigonométricos).

## Cálculo a demanda

Las computadoras y calculadoras modernas utilizan una distintas técnicas para obtener valores de funciones trigonométricas a demanda para ángulos arbitrarios (Kantabutra, 1996). Un método común, especialmente en procesadores de gama alta con unidades de coma flotante, es combinar una aproximación polinómica o racional (como la aproximación de Chebyshev, la mejor aproximación uniforme y la aproximación de Padé, y típicamente para precisiones más altas o variables, series de Taylor y Laurent) con reducción de rango y búsqueda de tabla, que primero buscan el ángulo más cercano en una tabla pequeña y luego usan el polinomio para calcular la corrección. Sin embargo, mantener la precisión mientras se realiza dicha interpolación no es trivial; y métodos como las tablas precisas de Gal, la reducción de Cody y Waite, y los algoritmos de reducción de Payne y Hanek se pueden usar para este propósito. En los dispositivos más simples, que carecen de un coprocesador multiplicador, existe un algoritmo llamado CORDIC (así como técnicas relacionadas) que es más eficiente, ya que solo utiliza cambios y adiciones. Todos estos métodos comúnmente se instalan en el hardware por razones de rendimiento.
El polinomio particular utilizado para aproximar una función trigonométrica se genera con anticipación utilizando alguna simulación de un algoritmo de aproximación minimax.
Para cálculos de muy alta precisión, cuando la convergencia de expansión en serie se vuelve demasiado lenta, las funciones trigonométricas pueden ser aproximadas por la media aritmético-geométrica, que a su vez se aproxima a la función trigonométrica por una integral elíptica (compleja) (Brent, 1976).
Las funciones trigonométricas de ángulos que son múltiplos racionales de 2π son números algebraicos. Los valores para a/b·2π se pueden encontrar mediante la aplicación de la fórmula de De Moivre para n = desde a hasta una b$^{ésima}$ raíz de la unidad, que también es una raíz del polinomio x$^b$-1 en el plano complejo. Por ejemplo, el coseno y el seno de 2π⋅5/37 son las partes real e imaginaria, respectivamente, de la quinta potencia de la raíz 37 de la unidad cos (2π/37) + sen (2π/37)i, que es una raíz del polinomio de grado 37 x$^{37}$−1. Para este caso, un algoritmo de búsqueda de raíces, como el método de Newton, es mucho más simple que los algoritmos aritmético-geométricos medios anteriores, mientras convergen a una tasa asintótica similar. Sin embargo, estos últimos algoritmos son necesarios para las constantes trigonométricas trascendentes.

## Fórmulas del ángulo mitad y suma de ángulos

Históricamente, el primer método por el cual se calcularon las tablas trigonométricas, y probablemente el más común hasta el advenimiento de las computadoras, fue aplicar repetidamente las identidades trigonométricas del ángulo mitad y adición de ángulos a partir de un valor conocido (como sen (π/2) = 1, cos (π/2) = 0). Este método fue utilizado por el antiguo astrónomo Ptolomeo, quien lo dedujo en el Almagesto, un tratado sobre astronomía. En forma moderna, las identidades que obtuvo se expresan de la siguiente manera (con signos determinados por el cuadrante en el que se encuentra x);
    $\cos \left({\frac {x}{2}}\right)=\pm {\sqrt {{\tfrac {1}{2}}(1+\cos x)}}$
    $\operatorname {sen} \left({\frac {x}{2}}\right)=\pm {\sqrt {{\tfrac {1}{2}}(1-\cos x)}}$
    $\operatorname {sen}(x\pm y)=\operatorname {sen}(x)\cos(y)\pm \cos(x)\operatorname {sen}(y)\,$
    $\cos(x\pm y)=\cos(x)\cos(y)\mp \operatorname {sen}(x)\operatorname {sen}(y)\,$
Estas fórmulas se usaron para construir la tabla de cuerdas de Ptolomeo, que se aplicó a problemas astronómicos.
Son posibles otras permutaciones en estas identidades: por ejemplo, en algunas de las primeras tablas trigonométricas no se usaron seno y coseno, sino seno y verseno.

## Aproximación rápida pero imprecisa

Un algoritmo rápido, pero impreciso, para calcular una tabla de N aproximaciones s$_n$ para sen(2πn/N) y c$_n$ para cos(2π n/N) es:
    s $_0$ = 0
    c $_0$ = 1
    s $_{n+1}$ = s $_n$ + d × c $_n$
    c $_{n+1}$ = c $_n$ − d × s $_n$
para n = 0,..., N − 1, donde d = 2π/N.
Este es simplemente el método de Euler para integrar la ecuación diferencial:
    $ds/dt=c$
    $dc/dt=-s$
con condiciones iniciales s(0) = 0 y c(0) = 1, cuya solución analítica es s = sen (t) y c = cos(t).
Desafortunadamente, este no es un algoritmo útil para generar tablas sinusoidales, porque produce errores significativos, proporcionales a 1/N.
Por ejemplo, para N = 256, el error máximo en los valores seno es ~0.061 (s$_{202}$ = − 1.0368 en lugar de −0.9757). Para N = 1024, el error máximo en los valores seno es ~0.015 (s$_{803}$ = −0.99321 en lugar de −0.97832), aproximadamente 4 veces menor. Si los valores del seno y del coseno obtenidos se representaran gráficamente, este algoritmo dibujaría una espiral logarítmica en lugar de un círculo.

## Una fórmula de recurrencia mejor, pero aún imperfecta

Una fórmula de recurrencia simple para generar tablas trigonométricas se basa en fórmula de Euler y la relación:
    $e^{i(\theta +\Delta )}=e^{i\theta }\times e^{i\Delta \theta }$
Esto lleva a la siguiente recurrencia para calcular los valores trigonométricos s$_n$ y c$_n$ como se indica más arriba:
    c $_0$ = 1
    s $_0$ = 0
    c $_{n+1}$ = w $_r$ c $_n$ − w $_i$ s $_n$
    s $_{n+1}$ = w $_i$ c $_n$ + w $_r$ s $_n$
para n = 0, ...., N − 1, donde w$_r$ = cos(2π/N) y w$_i$ = sen(2π/N). Estos dos valores trigonométricos iniciales generalmente se calculan utilizando funciones de biblioteca existentes (pero también se pueden encontrar, por ejemplo, empleando el método de Newton en el plano complejo para resolver la raíz primitiva de z$^N$−1)
Este método produciría una tabla exacta en aritmética exacta, pero tiene errores en aritmética de punto flotante de precisión finita. De hecho, los errores crecen como O(εN ) (tanto en el peor caso como en el promedio), donde ε es la precisión de coma flotante.
Una mejora significativa es usar la siguiente modificación a lo anterior, un truco (debido a Singleton, 1967) que se usa a menudo para generar valores trigonométricos para calcular TRF:
    c $_0$ = 1
    s $_0$ = 0
    c $_{n+1}$ = c $_n$ − α c $_n$ + β s $_n$ )
    s $_{n+1}$ = s $_n$ + ( β c$_n$ − α s$_n$ )
donde α = 2 sen $^2$(π/N) y β = sen(2π/N). Los errores de este método son mucho menores, O(ε √N) en promedio y O(ε N) en el peor de los casos, pero aún es lo suficientemente grande como para degradar sustancialmente la precisión de las TRF de tamaños grandes.