\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.45592842694085654 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 9.949689884521833 \cdot 10^{-6}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{else}:\\
\;\;\;\;-2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\mathsf{fma}\left(x, 2, \varepsilon\right)}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\right)\\
\end{array}double f(double x, double eps) {
double r66699 = x;
double r66700 = eps;
double r66701 = r66699 + r66700;
double r66702 = cos(r66701);
double r66703 = cos(r66699);
double r66704 = r66702 - r66703;
return r66704;
}
double f(double x, double eps) {
double r66705 = eps;
double r66706 = -7.455928426940857e-05;
bool r66707 = r66705 <= r66706;
double r66708 = 9.949689884521833e-06;
bool r66709 = r66705 <= r66708;
double r66710 = !r66709;
bool r66711 = r66707 || r66710;
double r66712 = x;
double r66713 = cos(r66712);
double r66714 = cos(r66705);
double r66715 = r66713 * r66714;
double r66716 = sin(r66712);
double r66717 = sin(r66705);
double r66718 = r66716 * r66717;
double r66719 = r66715 - r66718;
double r66720 = r66719 - r66713;
double r66721 = -2.0;
double r66722 = 2.0;
double r66723 = fma(r66712, r66722, r66705);
double r66724 = r66723 / r66722;
double r66725 = sin(r66724);
double r66726 = r66705 / r66722;
double r66727 = sin(r66726);
double r66728 = r66725 * r66727;
double r66729 = log1p(r66728);
double r66730 = expm1(r66729);
double r66731 = r66721 * r66730;
double r66732 = r66711 ? r66720 : r66731;
return r66732;
}



Bits error versus x



Bits error versus eps
if eps < -7.455928426940857e-05 or 9.949689884521833e-06 < eps Initial program 30.3
rmApplied cos-sum0.9
if -7.455928426940857e-05 < eps < 9.949689884521833e-06Initial program 49.6
rmApplied diff-cos38.0
Simplified0.5
rmApplied expm1-log1p-u0.5
Simplified0.5
Final simplification0.7
herbie shell --seed 2020042 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))