\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.68449879533306243542534197388249594951 \cdot 10^{-4} \lor \neg \left(\varepsilon \le 3.028675491606891100851602083299241030545 \cdot 10^{-6}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{else}:\\
\;\;\;\;-2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\end{array}double f(double x, double eps) {
double r35016 = x;
double r35017 = eps;
double r35018 = r35016 + r35017;
double r35019 = cos(r35018);
double r35020 = cos(r35016);
double r35021 = r35019 - r35020;
return r35021;
}
double f(double x, double eps) {
double r35022 = eps;
double r35023 = -0.00026844987953330624;
bool r35024 = r35022 <= r35023;
double r35025 = 3.028675491606891e-06;
bool r35026 = r35022 <= r35025;
double r35027 = !r35026;
bool r35028 = r35024 || r35027;
double r35029 = x;
double r35030 = cos(r35029);
double r35031 = cos(r35022);
double r35032 = r35030 * r35031;
double r35033 = sin(r35029);
double r35034 = sin(r35022);
double r35035 = r35033 * r35034;
double r35036 = r35032 - r35035;
double r35037 = r35036 - r35030;
double r35038 = -2.0;
double r35039 = 2.0;
double r35040 = r35022 / r35039;
double r35041 = sin(r35040);
double r35042 = r35029 + r35022;
double r35043 = r35042 + r35029;
double r35044 = r35043 / r35039;
double r35045 = sin(r35044);
double r35046 = r35041 * r35045;
double r35047 = r35038 * r35046;
double r35048 = r35028 ? r35037 : r35047;
return r35048;
}



Bits error versus x



Bits error versus eps
Results
if eps < -0.00026844987953330624 or 3.028675491606891e-06 < eps Initial program 29.4
rmApplied cos-sum1.0
if -0.00026844987953330624 < eps < 3.028675491606891e-06Initial program 49.2
rmApplied diff-cos38.3
Simplified0.5
Final simplification0.7
herbie shell --seed 2019325
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))