Trigo Table
Trigo Table
In mathematics, tables of trigonometric functions are useful in a number of areas. Before the existence of pocket calculators,
trigonometric tables were essential for navigation, science and engineering. The calculation of mathematical tables was an
important area of study, which led to the development of the first mechanical computing devices.
Modern computers and pocket calculators now generate trigonometric function values on demand, using special libraries of
mathematical code. Often, these libraries use pre-calculated tables internally, and compute the required value by using an
appropriate interpolation method. Interpolation of simple look-up tables of trigonometric functions is still used in computer
graphics, where only modest accuracy may be required and speed is often paramount.
Another important application of trigonometric tables and generation schemes is for fast Fourier transform (FFT) algorithms,
where the same trigonometric function values (called twiddle factors) must be evaluated many times in a given transform,
especially in the common case where many transforms of the same size are computed. In this case, calling generic library routines
every time is unacceptably slow. One option is to call the library routines once, to build up a table of those trigonometric values
that will be needed, but this requires significant memory to store the table. The other possibility, since a regular sequence of
values is required, is to use a recurrence formula to compute the trigonometric values on the fly. Significant research has been
devoted to finding accurate, stable recurrence schemes in order to preserve the accuracy of the FFT (which is very sensitive to
trigonometric errors).
Contents
On-demand computation
Half-angle and angle-addition formulas
A quick, but inaccurate, approximation
A better, but still imperfect, recurrence formula
See also
References
On-demand computation
Modern computers and calculators use a variety of techniques to provide trigonometric function values on demand for arbitrary
angles (Kantabutra, 1996). One common method, especially on higher-end processors with floating-point units, is to combine a
polynomial or rational approximation (such as Chebyshev approximation, best uniform approximation, and Padé approximation,
and typically for higher or variable precisions, Taylor and Laurent series) with range reduction and a table lookup — they first
look up the closest angle in a small table, and then use the polynomial to compute the correction. Maintaining precision while
performing such interpolation is nontrivial, however; and methods like Gal's accurate tables, Cody and Waite reduction, and
Payne and Hanek reduction algorithms can be used for this purpose. On simpler devices that lack a hardware multiplier, there is
an algorithm called CORDIC (as well as related techniques) that is more efficient, since it uses only shifts and additions. All of
these methods are commonly implemented in hardware for performance reasons.
The particular polynomial used to approximate a trig function is generated ahead of time using some approximation of a minimax
approximation algorithm.
For very high precision calculations, when series-expansion convergence becomes
too slow, trigonometric functions can be approximated by the arithmetic-geometric
mean, which itself approximates the trigonometric function by the (complex) elliptic
integral (Brent, 1976).
These were used to construct Ptolemy's table of chords, which was applied to astronomical problems.
Various other permutations on these identities are possible: for example, some early trigonometric tables used not sine and cosine,
but sine and versine).
s0 = 0
c0 = 1
sn+1 = sn + d × cn
cn+1 = cn − d × sn
This is simply the Euler method for integrating the differential equation:
with initial conditions s(0) = 0 and c(0) = 1, whose analytical solution is s = sin(t) and c = cos(t).
Unfortunately, this is not a useful algorithm for generating sine tables because it has a significant error, proportional to 1/N.
For example, for N = 256 the maximum error in the sine values is ~0.061 (s202 = −1.0368 instead of −0.9757). For N = 1024, the
maximum error in the sine values is ~0.015 (s803 = −0.99321 instead of −0.97832), about 4 times smaller. If the sine and cosine
values obtained were to be plotted, this algorithm would draw a logarithmic spiral rather than a circle.
This leads to the following recurrence to compute trigonometric values sn and cn as above:
c0 = 1
s0 = 0
cn+1 = wr cn − wi sn
sn+1 = wi cn + wr sn
for n = 0, ..., N − 1, where wr = cos(2π/N) and wi = sin(2π/N). These two starting trigonometric values are usually computed using
existing library functions (but could also be found e.g. by employing Newton's method in the complex plane to solve for the
primitive root of zN − 1).
This method would produce an exact table in exact arithmetic, but has errors in finite-precision floating-point arithmetic. In fact,
the errors grow as O(ε N) (in both the worst and average cases), where ε is the floating-point precision.
A significant improvement is to use the following modification to the above, a trick (due to Singleton, 1967) often used to
generate trigonometric values for FFT implementations:
c0 = 1
s0 = 0
cn+1 = cn − (α cn + β sn)
sn+1 = sn + (β cn − α sn)
where α = 2 sin2(π/N) and β = sin(2π/N). The errors of this method are much smaller, O(ε √N) on average and O(ε N) in the worst
case, but this is still large enough to substantially degrade the accuracy of FFTs of large sizes.
See also
Numerical analysis
CORDIC
Exact trigonometric constants
Aryabhata's sine table
Madhava's sine table
References
Carl B. Boyer (1991) A History of Mathematics, 2nd edition, John Wiley & Sons.
Manfred Tasche and Hansmartin Zeuner (2002) "Improved roundoff error analysis for precomputed twiddle
factors", Journal for Computational Analysis and Applications 4(1): 1–18.
James C. Schatzman (1996) "Accuracy of the discrete Fourier transform and the fast Fourier transform", SIAM
Journal on Scientific Computing 17(5): 1150–1166.
Vitit Kantabutra (1996) "On hardware for computing exponential and trigonometric functions," IEEE Transactions
on Computers 45(3): 328–339 .
R. P. Brent (1976) "Fast Multiple-Precision Evaluation of Elementary Functions (http://doi.acm.org/10.1145/32194
1.321944)", Journal of the Association for Computing Machinery 23: 242–251.
Singleton, Richard C. (1967) "On computing the fast Fourier transform", Communications of the ACM 10: 647–
654.
Gal, Shmuel and Bachelis, Boris (1991) "An accurate elementary mathematical library for the IEEE floating point
standard", ACM Transactions on Mathematical Software.
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using
this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia
Foundation, Inc., a non-profit organization.