\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.7962576357457494 \cdot 10^{-34}:\\
\;\;\;\;\cos \varepsilon \cdot \cos x - \sqrt[3]{{\left(\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)}^{3}}\\
\mathbf{elif}\;\varepsilon \le 3.54463964995298486 \cdot 10^{-7}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\cos \varepsilon \cdot \cos x - \mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)\right)\\
\end{array}double code(double x, double eps) {
return ((double) (((double) cos(((double) (x + eps)))) - ((double) cos(x))));
}
double code(double x, double eps) {
double VAR;
if ((eps <= -1.7962576357457494e-34)) {
VAR = ((double) (((double) (((double) cos(eps)) * ((double) cos(x)))) - ((double) cbrt(((double) pow(((double) fma(((double) sin(eps)), ((double) sin(x)), ((double) cos(x)))), 3.0))))));
} else {
double VAR_1;
if ((eps <= 3.544639649952985e-07)) {
VAR_1 = ((double) fma(0.041666666666666664, ((double) pow(eps, 4.0)), ((double) -(((double) fma(x, eps, ((double) (0.5 * ((double) pow(eps, 2.0))))))))));
} else {
VAR_1 = ((double) (((double) (((double) cos(eps)) * ((double) cos(x)))) - ((double) log1p(((double) expm1(((double) fma(((double) sin(eps)), ((double) sin(x)), ((double) cos(x))))))))));
}
VAR = VAR_1;
}
return VAR;
}



Bits error versus x



Bits error versus eps
Results
if eps < -1.7962576357457494e-34Initial program 32.7
rmApplied +-commutative32.7
Applied cos-sum5.7
Applied associate--l-5.7
Simplified5.7
rmApplied add-cbrt-cube5.9
Simplified5.9
if -1.7962576357457494e-34 < eps < 3.544639649952985e-07Initial program 49.2
rmApplied +-commutative49.2
Applied cos-sum48.9
Applied associate--l-48.9
Simplified48.9
Taylor expanded around 0 31.0
Simplified31.0
if 3.544639649952985e-07 < eps Initial program 29.8
rmApplied +-commutative29.8
Applied cos-sum1.1
Applied associate--l-1.2
Simplified1.2
rmApplied log1p-expm1-u1.2
Final simplification16.4
herbie shell --seed 2020114 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))