\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.41467470001176498 \cdot 10^{-4}:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{elif}\;\varepsilon \le 6.808328837524803 \cdot 10^{-5}:\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \left(\sin \left(\mathsf{fma}\left(2, x, \varepsilon\right) \cdot \frac{1}{2}\right) \cdot -2\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\
\end{array}double f(double x, double eps) {
double r46990 = x;
double r46991 = eps;
double r46992 = r46990 + r46991;
double r46993 = cos(r46992);
double r46994 = cos(r46990);
double r46995 = r46993 - r46994;
return r46995;
}
double f(double x, double eps) {
double r46996 = eps;
double r46997 = -0.0002414674700011765;
bool r46998 = r46996 <= r46997;
double r46999 = x;
double r47000 = cos(r46999);
double r47001 = cos(r46996);
double r47002 = r47000 * r47001;
double r47003 = sin(r46999);
double r47004 = sin(r46996);
double r47005 = r47003 * r47004;
double r47006 = r47002 - r47005;
double r47007 = r47006 - r47000;
double r47008 = 6.808328837524803e-05;
bool r47009 = r46996 <= r47008;
double r47010 = 0.5;
double r47011 = r47010 * r46996;
double r47012 = sin(r47011);
double r47013 = 2.0;
double r47014 = fma(r47013, r46999, r46996);
double r47015 = r47014 * r47010;
double r47016 = sin(r47015);
double r47017 = -2.0;
double r47018 = r47016 * r47017;
double r47019 = r47012 * r47018;
double r47020 = expm1(r47019);
double r47021 = log1p(r47020);
double r47022 = fma(r47003, r47004, r47000);
double r47023 = r47002 - r47022;
double r47024 = r47009 ? r47021 : r47023;
double r47025 = r46998 ? r47007 : r47024;
return r47025;
}



Bits error versus x



Bits error versus eps
if eps < -0.0002414674700011765Initial program 31.4
rmApplied cos-sum0.9
if -0.0002414674700011765 < eps < 6.808328837524803e-05Initial program 48.9
rmApplied diff-cos37.9
Simplified0.5
rmApplied associate-*r*0.5
Simplified0.5
rmApplied log1p-expm1-u0.5
Simplified0.5
if 6.808328837524803e-05 < eps Initial program 29.6
rmApplied cos-sum0.9
Applied associate--l-0.9
Simplified0.9
Final simplification0.7
herbie shell --seed 2020047 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))