\frac{1 - \cos x}{x \cdot x}\begin{array}{l}
\mathbf{if}\;x \le -0.029841445064018916 \lor \neg \left(x \le 0.0302568236777068268\right):\\
\;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{1 - \cos x}{x}}{x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{720}, {x}^{4}, \frac{1}{2}\right) - \frac{1}{24} \cdot {x}^{2}\\
\end{array}double f(double x) {
double r27703 = 1.0;
double r27704 = x;
double r27705 = cos(r27704);
double r27706 = r27703 - r27705;
double r27707 = r27704 * r27704;
double r27708 = r27706 / r27707;
return r27708;
}
double f(double x) {
double r27709 = x;
double r27710 = -0.029841445064018916;
bool r27711 = r27709 <= r27710;
double r27712 = 0.030256823677706827;
bool r27713 = r27709 <= r27712;
double r27714 = !r27713;
bool r27715 = r27711 || r27714;
double r27716 = 1.0;
double r27717 = cos(r27709);
double r27718 = r27716 - r27717;
double r27719 = r27718 / r27709;
double r27720 = r27719 / r27709;
double r27721 = log1p(r27720);
double r27722 = expm1(r27721);
double r27723 = 0.001388888888888889;
double r27724 = 4.0;
double r27725 = pow(r27709, r27724);
double r27726 = 0.5;
double r27727 = fma(r27723, r27725, r27726);
double r27728 = 0.041666666666666664;
double r27729 = 2.0;
double r27730 = pow(r27709, r27729);
double r27731 = r27728 * r27730;
double r27732 = r27727 - r27731;
double r27733 = r27715 ? r27722 : r27732;
return r27733;
}



Bits error versus x
if x < -0.029841445064018916 or 0.030256823677706827 < x Initial program 1.0
rmApplied add-sqr-sqrt1.1
Applied times-frac0.6
rmApplied expm1-log1p-u0.6
Simplified0.5
if -0.029841445064018916 < x < 0.030256823677706827Initial program 62.2
rmApplied add-sqr-sqrt62.2
Applied times-frac61.2
Taylor expanded around 0 0.0
Simplified0.0
Final simplification0.2
herbie shell --seed 2020045 +o rules:numerics
(FPCore (x)
:name "cos2 (problem 3.4.1)"
:precision binary64
(/ (- 1 (cos x)) (* x x)))