0

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.

jersam515
  • 113
  • 1
  • 4

4 Answers4

5

Are you sure you don't have access to java.lang.Math?

ncmathsadist
  • 49,383
3

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.

Pedro
  • 122,002
1

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}

Dan
  • 14,978
  • 1
    These 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
  • 3
    You 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
    @David That's why I suggested Bhaskhara's formula. – Pedro Mar 09 '12 at 23:20
  • 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
1

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$$

  • 3
    This 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