\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.79128728496023378 \cdot 10^{-8} \lor \neg \left(\varepsilon \le 2.5399061161975948 \cdot 10^{-5}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \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(x, 2, \varepsilon\right)}{2}\right)\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\\
\end{array}double f(double x, double eps) {
double r59977 = x;
double r59978 = eps;
double r59979 = r59977 + r59978;
double r59980 = cos(r59979);
double r59981 = cos(r59977);
double r59982 = r59980 - r59981;
return r59982;
}
double f(double x, double eps) {
double r59983 = eps;
double r59984 = -2.7912872849602338e-08;
bool r59985 = r59983 <= r59984;
double r59986 = 2.5399061161975948e-05;
bool r59987 = r59983 <= r59986;
double r59988 = !r59987;
bool r59989 = r59985 || r59988;
double r59990 = x;
double r59991 = cos(r59990);
double r59992 = cos(r59983);
double r59993 = r59991 * r59992;
double r59994 = sin(r59990);
double r59995 = sin(r59983);
double r59996 = r59994 * r59995;
double r59997 = r59993 - r59996;
double r59998 = r59997 - r59991;
double r59999 = -2.0;
double r60000 = 2.0;
double r60001 = fma(r59990, r60000, r59983);
double r60002 = r60001 / r60000;
double r60003 = sin(r60002);
double r60004 = expm1(r60003);
double r60005 = log1p(r60004);
double r60006 = r59983 / r60000;
double r60007 = sin(r60006);
double r60008 = r60005 * r60007;
double r60009 = r59999 * r60008;
double r60010 = r59989 ? r59998 : r60009;
return r60010;
}



Bits error versus x



Bits error versus eps
if eps < -2.7912872849602338e-08 or 2.5399061161975948e-05 < eps Initial program 30.2
rmApplied cos-sum1.1
if -2.7912872849602338e-08 < eps < 2.5399061161975948e-05Initial program 49.4
rmApplied diff-cos38.0
Simplified0.5
rmApplied expm1-log1p-u0.5
Simplified0.5
rmApplied log1p-expm1-u0.6
Simplified0.5
Final simplification0.8
herbie shell --seed 2020045 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))