\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.123336884479659292788468472057417102405 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 531195561.4738419055938720703125\right):\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\
\mathbf{else}:\\
\;\;\;\;\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)\\
\end{array}double f(double x, double eps) {
double r35933 = x;
double r35934 = eps;
double r35935 = r35933 + r35934;
double r35936 = cos(r35935);
double r35937 = cos(r35933);
double r35938 = r35936 - r35937;
return r35938;
}
double f(double x, double eps) {
double r35939 = eps;
double r35940 = -1.1233368844796593e-05;
bool r35941 = r35939 <= r35940;
double r35942 = 531195561.4738419;
bool r35943 = r35939 <= r35942;
double r35944 = !r35943;
bool r35945 = r35941 || r35944;
double r35946 = x;
double r35947 = cos(r35946);
double r35948 = cos(r35939);
double r35949 = r35947 * r35948;
double r35950 = sin(r35946);
double r35951 = sin(r35939);
double r35952 = fma(r35950, r35951, r35947);
double r35953 = r35949 - r35952;
double r35954 = -2.0;
double r35955 = 2.0;
double r35956 = r35939 / r35955;
double r35957 = sin(r35956);
double r35958 = r35954 * r35957;
double r35959 = fma(r35955, r35946, r35939);
double r35960 = r35959 / r35955;
double r35961 = sin(r35960);
double r35962 = log1p(r35961);
double r35963 = expm1(r35962);
double r35964 = r35958 * r35963;
double r35965 = r35945 ? r35953 : r35964;
return r35965;
}



Bits error versus x



Bits error versus eps
if eps < -1.1233368844796593e-05 or 531195561.4738419 < eps Initial program 29.9
rmApplied cos-sum0.9
Applied associate--l-0.9
Simplified0.9
if -1.1233368844796593e-05 < eps < 531195561.4738419Initial program 49.3
rmApplied diff-cos38.1
Simplified1.2
rmApplied associate-*r*1.2
rmApplied expm1-log1p-u1.2
Final simplification1.1
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))