\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1576820.31278729089535772800445556640625:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{elif}\;\varepsilon \le 2.264234444891437172519416121119206763979 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{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 r40216 = x;
double r40217 = eps;
double r40218 = r40216 + r40217;
double r40219 = cos(r40218);
double r40220 = cos(r40216);
double r40221 = r40219 - r40220;
return r40221;
}
double f(double x, double eps) {
double r40222 = eps;
double r40223 = -1576820.312787291;
bool r40224 = r40222 <= r40223;
double r40225 = x;
double r40226 = cos(r40225);
double r40227 = cos(r40222);
double r40228 = r40226 * r40227;
double r40229 = sin(r40225);
double r40230 = sin(r40222);
double r40231 = r40229 * r40230;
double r40232 = r40228 - r40231;
double r40233 = r40232 - r40226;
double r40234 = 0.00022642344448914372;
bool r40235 = r40222 <= r40234;
double r40236 = -2.0;
double r40237 = 2.0;
double r40238 = r40222 / r40237;
double r40239 = sin(r40238);
double r40240 = r40236 * r40239;
double r40241 = fma(r40237, r40225, r40222);
double r40242 = r40241 / r40237;
double r40243 = sin(r40242);
double r40244 = r40240 * r40243;
double r40245 = expm1(r40244);
double r40246 = log1p(r40245);
double r40247 = fma(r40229, r40230, r40226);
double r40248 = r40228 - r40247;
double r40249 = r40235 ? r40246 : r40248;
double r40250 = r40224 ? r40233 : r40249;
return r40250;
}



Bits error versus x



Bits error versus eps
if eps < -1576820.312787291Initial program 30.2
rmApplied cos-sum0.8
if -1576820.312787291 < eps < 0.00022642344448914372Initial program 49.0
rmApplied diff-cos38.0
Simplified0.9
rmApplied associate-*r*0.9
rmApplied log1p-expm1-u0.9
if 0.00022642344448914372 < eps Initial program 31.1
rmApplied cos-sum0.9
Applied associate--l-0.9
Simplified0.9
Final simplification0.9
herbie shell --seed 2019322 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))