\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.850613893539446240586818920315081982153 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 5.448146684575087654589520269610147806816 \cdot 10^{-4}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{else}:\\
\;\;\;\;-2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\end{array}double f(double x, double eps) {
double r60263 = x;
double r60264 = eps;
double r60265 = r60263 + r60264;
double r60266 = cos(r60265);
double r60267 = cos(r60263);
double r60268 = r60266 - r60267;
return r60268;
}
double f(double x, double eps) {
double r60269 = eps;
double r60270 = -2.8506138935394462e-06;
bool r60271 = r60269 <= r60270;
double r60272 = 0.0005448146684575088;
bool r60273 = r60269 <= r60272;
double r60274 = !r60273;
bool r60275 = r60271 || r60274;
double r60276 = x;
double r60277 = cos(r60276);
double r60278 = cos(r60269);
double r60279 = r60277 * r60278;
double r60280 = sin(r60276);
double r60281 = sin(r60269);
double r60282 = r60280 * r60281;
double r60283 = r60279 - r60282;
double r60284 = r60283 - r60277;
double r60285 = -2.0;
double r60286 = 2.0;
double r60287 = r60269 / r60286;
double r60288 = sin(r60287);
double r60289 = r60276 + r60269;
double r60290 = r60289 + r60276;
double r60291 = r60290 / r60286;
double r60292 = sin(r60291);
double r60293 = r60288 * r60292;
double r60294 = r60285 * r60293;
double r60295 = r60275 ? r60284 : r60294;
return r60295;
}



Bits error versus x



Bits error versus eps
Results
if eps < -2.8506138935394462e-06 or 0.0005448146684575088 < eps Initial program 29.2
rmApplied cos-sum0.9
if -2.8506138935394462e-06 < eps < 0.0005448146684575088Initial program 49.5
rmApplied diff-cos37.7
Simplified0.5
Final simplification0.7
herbie shell --seed 2019351
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))