\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6443.306290177518349082674831151962280273 \lor \neg \left(\varepsilon \le 1.459775390859078191777703503717589228472 \cdot 10^{-4}\right):\\
\;\;\;\;\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{else}:\\
\;\;\;\;-2 \cdot \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\\
\end{array}double f(double x, double eps) {
double r37514 = x;
double r37515 = eps;
double r37516 = r37514 + r37515;
double r37517 = cos(r37516);
double r37518 = cos(r37514);
double r37519 = r37517 - r37518;
return r37519;
}
double f(double x, double eps) {
double r37520 = eps;
double r37521 = -6443.306290177518;
bool r37522 = r37520 <= r37521;
double r37523 = 0.00014597753908590782;
bool r37524 = r37520 <= r37523;
double r37525 = !r37524;
bool r37526 = r37522 || r37525;
double r37527 = cos(r37520);
double r37528 = x;
double r37529 = cos(r37528);
double r37530 = r37527 * r37529;
double r37531 = sin(r37528);
double r37532 = sin(r37520);
double r37533 = r37531 * r37532;
double r37534 = r37530 - r37533;
double r37535 = r37534 - r37529;
double r37536 = -2.0;
double r37537 = 2.0;
double r37538 = fma(r37537, r37528, r37520);
double r37539 = r37538 / r37537;
double r37540 = sin(r37539);
double r37541 = expm1(r37540);
double r37542 = log1p(r37541);
double r37543 = r37520 / r37537;
double r37544 = sin(r37543);
double r37545 = r37542 * r37544;
double r37546 = r37536 * r37545;
double r37547 = r37526 ? r37535 : r37546;
return r37547;
}



Bits error versus x



Bits error versus eps
if eps < -6443.306290177518 or 0.00014597753908590782 < eps Initial program 30.3
rmApplied cos-sum0.9
Simplified0.9
if -6443.306290177518 < eps < 0.00014597753908590782Initial program 49.7
rmApplied diff-cos37.7
Simplified0.8
rmApplied log1p-expm1-u0.9
Simplified0.9
Final simplification0.9
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
(- (cos (+ x eps)) (cos x)))