\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.608808965388138481969471094146229006583 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 260530.52023522579111158847808837890625\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin \varepsilon \cdot \sin x\right) - \cos x\\
\mathbf{else}:\\
\;\;\;\;\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\\
\end{array}double f(double x, double eps) {
double r50271 = x;
double r50272 = eps;
double r50273 = r50271 + r50272;
double r50274 = cos(r50273);
double r50275 = cos(r50271);
double r50276 = r50274 - r50275;
return r50276;
}
double f(double x, double eps) {
double r50277 = eps;
double r50278 = -8.608808965388138e-05;
bool r50279 = r50277 <= r50278;
double r50280 = 260530.5202352258;
bool r50281 = r50277 <= r50280;
double r50282 = !r50281;
bool r50283 = r50279 || r50282;
double r50284 = x;
double r50285 = cos(r50284);
double r50286 = cos(r50277);
double r50287 = r50285 * r50286;
double r50288 = sin(r50277);
double r50289 = sin(r50284);
double r50290 = r50288 * r50289;
double r50291 = r50287 - r50290;
double r50292 = r50291 - r50285;
double r50293 = -2.0;
double r50294 = 2.0;
double r50295 = r50277 / r50294;
double r50296 = sin(r50295);
double r50297 = r50293 * r50296;
double r50298 = fma(r50294, r50284, r50277);
double r50299 = r50298 / r50294;
double r50300 = sin(r50299);
double r50301 = r50297 * r50300;
double r50302 = r50283 ? r50292 : r50301;
return r50302;
}



Bits error versus x



Bits error versus eps
if eps < -8.608808965388138e-05 or 260530.5202352258 < eps Initial program 30.1
Simplified30.1
rmApplied cos-sum0.8
Simplified0.8
if -8.608808965388138e-05 < eps < 260530.5202352258Initial program 49.1
Simplified49.1
rmApplied diff-cos37.6
Simplified0.9
rmApplied associate-*r*0.9
Final simplification0.9
herbie shell --seed 2019194 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
(- (cos (+ x eps)) (cos x)))