\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.9500525747086803 \cdot 10^{-33}:\\
\;\;\;\;\mathsf{fma}\left(\cos \varepsilon, \cos x, -\sin \varepsilon \cdot \sin x\right) + \mathsf{fma}\left(\sin x, \left(-\sin \varepsilon\right) + \sin \varepsilon, -\cos x\right)\\
\mathbf{elif}\;\varepsilon \le 4.69434538371788253 \cdot 10^{-6}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\\
\end{array}double code(double x, double eps) {
return (cos((x + eps)) - cos(x));
}
double code(double x, double eps) {
double VAR;
if ((eps <= -2.9500525747086803e-33)) {
VAR = (fma(cos(eps), cos(x), -(sin(eps) * sin(x))) + fma(sin(x), (-sin(eps) + sin(eps)), -cos(x)));
} else {
double VAR_1;
if ((eps <= 4.6943453837178825e-06)) {
VAR_1 = fma(0.041666666666666664, pow(eps, 4.0), -fma(x, eps, (0.5 * pow(eps, 2.0))));
} else {
VAR_1 = fma(cos(eps), cos(x), -fma(sin(x), sin(eps), cos(x)));
}
VAR = VAR_1;
}
return VAR;
}



Bits error versus x



Bits error versus eps
Results
if eps < -2.9500525747086803e-33Initial program 33.0
rmApplied cos-sum4.9
rmApplied *-commutative4.9
Applied prod-diff4.9
Applied associate--l+4.9
Simplified4.9
if -2.9500525747086803e-33 < eps < 4.6943453837178825e-06Initial program 48.6
rmApplied cos-sum48.3
rmApplied *-commutative48.3
Applied prod-diff48.3
Applied associate--l+48.3
Simplified48.3
Taylor expanded around 0 30.9
Simplified30.9
if 4.6943453837178825e-06 < eps Initial program 30.4
rmApplied cos-sum0.9
Taylor expanded around inf 1.0
Simplified0.9
Final simplification16.0
herbie shell --seed 2020078 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))