\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.8390408000405122 \cdot 10^{-17} \lor \neg \left(\varepsilon \le 1.8711149652135092 \cdot 10^{-6}\right):\\
\;\;\;\;\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\
\end{array}double f(double x, double eps) {
double r61542 = x;
double r61543 = eps;
double r61544 = r61542 + r61543;
double r61545 = cos(r61544);
double r61546 = cos(r61542);
double r61547 = r61545 - r61546;
return r61547;
}
double f(double x, double eps) {
double r61548 = eps;
double r61549 = -9.839040800040512e-17;
bool r61550 = r61548 <= r61549;
double r61551 = 1.8711149652135092e-06;
bool r61552 = r61548 <= r61551;
double r61553 = !r61552;
bool r61554 = r61550 || r61553;
double r61555 = cos(r61548);
double r61556 = x;
double r61557 = cos(r61556);
double r61558 = sin(r61556);
double r61559 = sin(r61548);
double r61560 = fma(r61558, r61559, r61557);
double r61561 = expm1(r61560);
double r61562 = log1p(r61561);
double r61563 = -r61562;
double r61564 = fma(r61555, r61557, r61563);
double r61565 = 3.0;
double r61566 = pow(r61548, r61565);
double r61567 = 0.041666666666666664;
double r61568 = r61566 * r61567;
double r61569 = 0.5;
double r61570 = fma(r61569, r61548, r61556);
double r61571 = r61568 - r61570;
double r61572 = r61548 * r61571;
double r61573 = r61554 ? r61564 : r61572;
return r61573;
}



Bits error versus x



Bits error versus eps
if eps < -9.839040800040512e-17 or 1.8711149652135092e-06 < eps Initial program 30.2
rmApplied cos-sum1.6
Taylor expanded around inf 1.6
Simplified1.5
rmApplied log1p-expm1-u1.6
if -9.839040800040512e-17 < eps < 1.8711149652135092e-06Initial program 49.1
rmApplied cos-sum48.9
Taylor expanded around inf 48.9
Simplified48.9
Taylor expanded around 0 31.5
Simplified31.5
Final simplification16.3
herbie shell --seed 2020059 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))