\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \leq -2.8611454772111663 \cdot 10^{-5} \lor \neg \left(\varepsilon \leq 3.026368651951747 \cdot 10^{-5}\right):\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\\
\mathbf{else}:\\
\;\;\;\;-\mathsf{fma}\left(\varepsilon, \sin x, 0.5 \cdot \left(\cos x \cdot \left(\varepsilon \cdot \varepsilon\right)\right)\right)\\
\end{array}
(FPCore (x eps) :precision binary64 (- (cos (+ x eps)) (cos x)))
(FPCore (x eps) :precision binary64 (if (or (<= eps -2.8611454772111663e-5) (not (<= eps 3.026368651951747e-5))) (- (* (cos x) (cos eps)) (fma (sin eps) (sin x) (cos x))) (- (fma eps (sin x) (* 0.5 (* (cos x) (* eps eps)))))))
double code(double x, double eps) {
return cos(x + eps) - cos(x);
}
double code(double x, double eps) {
double tmp;
if ((eps <= -2.8611454772111663e-5) || !(eps <= 3.026368651951747e-5)) {
tmp = (cos(x) * cos(eps)) - fma(sin(eps), sin(x), cos(x));
} else {
tmp = -fma(eps, sin(x), (0.5 * (cos(x) * (eps * eps))));
}
return tmp;
}



Bits error versus x



Bits error versus eps
if eps < -2.86114547721116629e-5 or 3.02636865195174714e-5 < eps Initial program 30.8
Applied cos-sum_binary640.9
Applied associate--l-_binary640.9
Simplified0.9
if -2.86114547721116629e-5 < eps < 3.02636865195174714e-5Initial program 49.1
Taylor expanded around 0 0.2
Simplified0.2
Final simplification0.6
herbie shell --seed 2021210
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))