How does a calculator calculate the sine, cosine, tangent using just a number?
- Sine $\theta$ = opposite/hypotenuse
- Cosine $\theta$ = adjacent/hypotenuse
- Tangent $\theta$ = opposite/adjacent
In order to calculate the sine or the cosine or the tangent I need to know $3$ sides of a right triangle. $2$ for each corresponding trigonometric function. How does a calculator calculate the sine, cosine, tangent of a number (that is actually an angle ?) without knowing any sides?
Calculators either use the Taylor Series for $\sin / \cos$ or the CORDIC algorithm. A lot of information is available on Taylor Series, so I'll explain CORDIC instead.
The input required is a number in radians $\theta$, which is between $-\pi / 2$ and $\pi / 2$ (from this, we can get all of the other angles).
First, we must create a table of $\arctan 2^{-k}$ for $k=0,1,2,\ldots, N-1$. This is usually precomputed using the Taylor Series and then included with the calculator. Let $t_i = \arctan 2^{-i}$.
Consider the point in the plane $(1, 0)$. Draw the unit circle. Now if we can somehow get the point to make an angle $\theta$ with the $x$-axis, then the $x$ coordinate is the $\cos \theta$ and the $y$-coordinate is the $\sin \theta$.
Now we need to somehow get the point to have angle $\theta$. Let's do that now.
Consider three sequences $\{ x_i, y_i, z_i \}$. $z_i$ will tell us which way to rotate the point (counter-clockwise or clockwise). $x_i$ and $y_i$ are the coordinates of the point after the $i$th rotation.
Let $z_0 = \theta$, $x_0 = 1/A_{40} \approx 0.607252935008881 $, $y_0 = 0$. $A_{40}$ is a constant, and we use $40$ because we have $40$ iterations, which will give us $10$ decimal digits of accuracy. This constant is also precomputed1.
Now let:
$$ z_{i+1} = z_i - d_i t_i $$ $$ x_{i+1} = x_i - y_i d_i 2^{-i} $$ $$ y_i = y_i + x_i d_i 2^{-i} $$ $$ d_i = \text{1 if } z_i \ge 0 \text{ and -1 otherwise}$$
From this, it can be shown that $x_N$ and $y_N$ eventually become $\cos \theta$ and $\sin \theta$, respectively.
1: $A_N = \displaystyle\prod_{i=0}^{N-1} \sqrt{1+2^{-2i}}$
I always wondered about the same thing, till I attended my first calculus class.
As Julien rightly noted. It uses power series of $\sin x, \cos x$ etc, to only approximately calculate the value of angles(in radians) you put in. You can read more about it here. And power series of $\tan x, \sec x$ and $\text{cosec } x$ is given here.
Most implementations of libm for gcc use Chebyshev polynomials. It's faster than Taylor/Maclaurin series and more accurate than Cordics.