\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.1888021786142176 \cdot 10^{-8}:\\
\;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\
\mathbf{elif}\;\varepsilon \le 4.9162524699735606 \cdot 10^{-5}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\
\end{array}double f(double x, double eps) {
double r29334 = x;
double r29335 = eps;
double r29336 = r29334 + r29335;
double r29337 = cos(r29336);
double r29338 = cos(r29334);
double r29339 = r29337 - r29338;
return r29339;
}
double f(double x, double eps) {
double r29340 = eps;
double r29341 = -1.1888021786142176e-08;
bool r29342 = r29340 <= r29341;
double r29343 = cos(r29340);
double r29344 = x;
double r29345 = cos(r29344);
double r29346 = sin(r29344);
double r29347 = sin(r29340);
double r29348 = fma(r29346, r29347, r29345);
double r29349 = -r29348;
double r29350 = fma(r29343, r29345, r29349);
double r29351 = exp(r29350);
double r29352 = log(r29351);
double r29353 = 4.9162524699735606e-05;
bool r29354 = r29340 <= r29353;
double r29355 = 3.0;
double r29356 = pow(r29340, r29355);
double r29357 = 0.041666666666666664;
double r29358 = r29356 * r29357;
double r29359 = 0.5;
double r29360 = fma(r29359, r29340, r29344);
double r29361 = r29358 - r29360;
double r29362 = r29340 * r29361;
double r29363 = r29345 * r29343;
double r29364 = expm1(r29363);
double r29365 = log1p(r29364);
double r29366 = r29365 - r29348;
double r29367 = r29354 ? r29362 : r29366;
double r29368 = r29342 ? r29352 : r29367;
return r29368;
}



Bits error versus x



Bits error versus eps
if eps < -1.1888021786142176e-08Initial program 30.0
rmApplied cos-sum1.3
rmApplied add-log-exp1.4
Applied add-log-exp1.4
Applied add-log-exp1.6
Applied diff-log1.6
Applied diff-log1.7
Simplified1.4
if -1.1888021786142176e-08 < eps < 4.9162524699735606e-05Initial program 49.1
rmApplied cos-sum48.6
Applied associate--l-48.6
Simplified48.6
Taylor expanded around inf 48.6
Simplified48.6
Taylor expanded around 0 30.9
Simplified30.9
if 4.9162524699735606e-05 < eps Initial program 32.4
rmApplied cos-sum0.9
Applied associate--l-0.9
Simplified0.9
rmApplied log1p-expm1-u1.0
Final simplification15.9
herbie shell --seed 2020036 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))