I'm an Android programmer and am working on a graphing calculator. I have been looking for a formula for sine and cosine to put in there. I have a decent understanding of mathematics but can not seem to find this formula. Any help would be great, thanks.
-
3http://en.wikipedia.org/wiki/CORDIC – Qiaochu Yuan Feb 23 '12 at 01:45
-
1for information : every processor with a FPU implements those – reuns Feb 13 '16 at 20:43
-
1I would just use some free library to do this. It's likely going to be much faster than anything you could write by hand. Unless you're just doing it for fun, in which case, knock yourself out! – Jair Taylor Feb 13 '16 at 21:02
4 Answers
Are you sure you don't have access to java.lang.Math?

- 49,383
-
Yes, thanks for pointing out that method. Knowing the formula doesn't hurt anyways though. – jersam515 Feb 23 '12 at 01:47
You might want to consider finite expressions too. Particularily
$$ \cos \frac{\pi x}{2} \approx 4\frac{1-x^2}{4+x^4} \text{ ; for} -1 <x<1$$ and
$$\sin x \approx \frac{{16x\left( {\pi - x} \right)}}{{5{\pi ^2} - 4x\left( {\pi - x} \right)}} \text{ ; for } 0 <x<\pi $$
They give a great approximation: see here.
-
The equals signs look bad here. And the first one isn't really great: the difference in graphs can be seen with naked eyes. – Ruslan Feb 13 '16 at 18:24
-
The best-known formulas are the Taylor series:
\begin{align} \sin x & = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots \\[10pt] & = \sum_{n=0}^\infty \frac{(-1)^n x^{2n+1}}{(2n+1)!} \\[10pt] \cos x & = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \cdots \\[10pt] & = \sum_{n=0}^\infty \frac{(-1)^n x^{2n}}{(2n)!} \end{align}

- 14,978
-
1These work well when $x$ is small. One must suspect for larger $x$ there are refinements that are more computationally efficient. – Michael Hardy Feb 23 '12 at 01:51
-
3You may want to reduce the argument to an angle within 0 and $2\pi$. Then you'd only need a few terms to get a good approximation (you can even reduce it to an angle between $-\pi/2$ and $\pi/2$ and adjust appropriately, using the symmetry of the functions, afterwards). – David Mitra Feb 23 '12 at 01:51
-
1
-
1@MichaelHardy: One simple way (not the fastest known) is to compute $\exp(ix) = \exp(ix2^{-k})^{2^k}$ for suitable natural $k$, via repeated squaring after Taylor approximation. The choice of $2$ is also great for binary format. The (fractional) error roughly doubles per squaring, so you must compute $\exp(ix2^{-k})$ with error $2^{-k}$ times the desired error of $2^{-p}$. If you choose $k$ such that $x2^{-k}<2^{-\sqrt{p}}$, then you need $O(\sqrt{p}+k)$ terms of Taylor expansion and $k$ squarings, which require $O(\sqrt{p})$ multiplications in total as $p \to \infty$. – user21820 Sep 22 '17 at 06:27
-
@DavidMitra: There's a little problem with that method when it comes to arbitrary precision. You need to compute $π$ first. Also, even if you have $x = 1$, you would need $O(p/\log(p))$ multiplications if you want to get precision $2^{-p}$ because the error term is at least $1/n^n$ for $n$ terms and so you need $n \in Ω(p/\log(p))$. In contrast, if you use the identity I gave above, you reduce the computational complexity to $O(\sqrt{p})$ multiplications. There are faster known algorithms such as AGM, but this is an elementary way to use the Taylor expansion for efficient computation. – user21820 Sep 22 '17 at 06:37
You can express them using MacLaurin series or Taylor series expansions. You can find this on Wikipedia.
$$\sin(x) = \sum_{n=0}^{\infty}\frac{(-1)^n}{(2n+1)!}x^{2n+1}= x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\ldots$$
$$\cos(x) =\sum_{n=0}^{\infty}\frac{(-1)^n}{(2n)!}x^{2n}=1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\ldots$$

- 26,184

- 111
-
3This is too little information to be of use for a compute program. How many terms should be calculated? What pre-processing (range reduction) can be done on the parameter? How should the polynomial be calculated? And son. Can you add any of these details? Worst of all, another answer, previous to yours, already gives this information. What can you add to that other answer? – Rory Daulton Feb 13 '16 at 21:14