\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -0.22306452923435388:\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\\
\mathbf{elif}\;\varepsilon \le 0.00391800888554098:\\
\;\;\;\;\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right) \cdot \left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\\
\end{array}double f(double x, double eps) {
double r704247 = x;
double r704248 = eps;
double r704249 = r704247 + r704248;
double r704250 = cos(r704249);
double r704251 = cos(r704247);
double r704252 = r704250 - r704251;
return r704252;
}
double f(double x, double eps) {
double r704253 = eps;
double r704254 = -0.22306452923435388;
bool r704255 = r704253 <= r704254;
double r704256 = x;
double r704257 = cos(r704256);
double r704258 = cos(r704253);
double r704259 = r704257 * r704258;
double r704260 = sin(r704253);
double r704261 = sin(r704256);
double r704262 = fma(r704260, r704261, r704257);
double r704263 = r704259 - r704262;
double r704264 = 0.00391800888554098;
bool r704265 = r704253 <= r704264;
double r704266 = 2.0;
double r704267 = fma(r704266, r704256, r704253);
double r704268 = r704267 / r704266;
double r704269 = sin(r704268);
double r704270 = -2.0;
double r704271 = r704253 / r704266;
double r704272 = sin(r704271);
double r704273 = r704270 * r704272;
double r704274 = r704269 * r704273;
double r704275 = r704265 ? r704274 : r704263;
double r704276 = r704255 ? r704263 : r704275;
return r704276;
}



Bits error versus x



Bits error versus eps
if eps < -0.22306452923435388 or 0.00391800888554098 < eps Initial program 29.7
rmApplied cos-sum0.8
Applied associate--l-0.8
Simplified0.8
if -0.22306452923435388 < eps < 0.00391800888554098Initial program 49.0
rmApplied diff-cos37.2
Simplified0.6
rmApplied associate-*r*0.6
Final simplification0.7
herbie shell --seed 2019156 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
(- (cos (+ x eps)) (cos x)))