\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -0.03196418493759398127274096168548567220569:\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\
\mathbf{elif}\;\varepsilon \le 9.763543264731029431170022947483744246711 \cdot 10^{-5}:\\
\;\;\;\;\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\end{array}double f(double x, double eps) {
double r20431 = x;
double r20432 = eps;
double r20433 = r20431 + r20432;
double r20434 = cos(r20433);
double r20435 = cos(r20431);
double r20436 = r20434 - r20435;
return r20436;
}
double f(double x, double eps) {
double r20437 = eps;
double r20438 = -0.03196418493759398;
bool r20439 = r20437 <= r20438;
double r20440 = x;
double r20441 = cos(r20440);
double r20442 = cos(r20437);
double r20443 = r20441 * r20442;
double r20444 = sin(r20440);
double r20445 = sin(r20437);
double r20446 = fma(r20444, r20445, r20441);
double r20447 = r20443 - r20446;
double r20448 = 9.76354326473103e-05;
bool r20449 = r20437 <= r20448;
double r20450 = -2.0;
double r20451 = 2.0;
double r20452 = r20437 / r20451;
double r20453 = sin(r20452);
double r20454 = r20450 * r20453;
double r20455 = r20440 + r20437;
double r20456 = r20455 + r20440;
double r20457 = r20456 / r20451;
double r20458 = sin(r20457);
double r20459 = expm1(r20458);
double r20460 = log1p(r20459);
double r20461 = r20454 * r20460;
double r20462 = r20442 * r20441;
double r20463 = r20444 * r20445;
double r20464 = r20462 - r20463;
double r20465 = r20464 - r20441;
double r20466 = r20449 ? r20461 : r20465;
double r20467 = r20439 ? r20447 : r20466;
return r20467;
}



Bits error versus x



Bits error versus eps
if eps < -0.03196418493759398Initial program 29.8
rmApplied cos-sum0.8
Applied associate--l-0.8
Simplified0.8
if -0.03196418493759398 < eps < 9.76354326473103e-05Initial program 49.1
rmApplied diff-cos38.2
Simplified0.6
rmApplied associate-*r*0.6
Simplified0.6
rmApplied log1p-expm1-u0.7
if 9.76354326473103e-05 < eps Initial program 29.1
rmApplied cos-sum0.9
Simplified0.9
Final simplification0.8
herbie shell --seed 2019235 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))