# Polynomial approximation for floating-point arithmetic

I cannot remember where I picked this up, but during my time reading about polynomial approximation for floating-point arithmetic of sin(x), I vaguely remember that there is an extra step in argument reduction. Specifically, it seems to involve "constructing a polynomial approximation for sin(x)/x instead", as "floating-point numbers are much denser closer to zero".

Is that true? I am in a bit of a stumble since I cannot quite pin down the precise statement to perform a Google search. Any comments/suggestions?

• Inside math libraries $\sin(x)$ is commonly computed as a minimax approximation of the form $x + x^{3}P(x^{2})$, where $P$ is a polynomial. This is numerically advantageous. Dec 14, 2021 at 0:59

The sine is an odd function, so you want that also in an approximation. A polynomial with $$p(0)=0$$ can be factored as $$p(x)=xq(x)$$, so $$q(x)\approx \frac{\sin(x)}{x}$$.
Each interval $$[2^n,2^{n+1})$$ contains as many floating point numbers as $$[1,2)$$. For negative $$n$$ these intervals concentrate around zero, the density of them around zero is so indeed much larger than anywhere else. ($$n$$ has to remain in the exponent range, and then there are additionally the denormal numbers.)
The proper question to ask is how the error of the polynomial approximation is measured. One could minimize $$\sup_{x\in I}|xq(x)-\sin(x)|$$ or $$\sup_{x\in I}|q(x)-\sin(x)/x|$$ for some interval $$I$$, getting slightly different coefficients. Using trigonometric symmetries and a corresponding cosine approximation, $$I=[0,\frac\pi4]$$ should be sufficient.
• My notes say: For IEEE-754 binary64, $\sin(x) = x$ for $|x| \leq 2.1491193328908210 \cdot 10^{-8}$, $\cos(x) = 1$ for $|x| \leq 1.0536712127723507 \cdot 10^{-8}$ Dec 14, 2021 at 7:29