\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.262150939480161652747637737520189360474 \cdot 10^{-9}:\\
\;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\left(\sin x \cdot \sin \varepsilon + \cos x\right)\right)\\
\mathbf{elif}\;\varepsilon \le 1.628861255227420308764477650686573596197 \cdot 10^{-35}:\\
\;\;\;\;\varepsilon \cdot \left(\mathsf{fma}\left(\left(x \cdot x\right) \cdot \frac{1}{6}, x, \varepsilon \cdot \frac{-1}{2}\right) - x\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)}\right)\\
\end{array}double f(double x, double eps) {
double r2547803 = x;
double r2547804 = eps;
double r2547805 = r2547803 + r2547804;
double r2547806 = cos(r2547805);
double r2547807 = cos(r2547803);
double r2547808 = r2547806 - r2547807;
return r2547808;
}
double f(double x, double eps) {
double r2547809 = eps;
double r2547810 = -3.2621509394801617e-09;
bool r2547811 = r2547809 <= r2547810;
double r2547812 = x;
double r2547813 = cos(r2547812);
double r2547814 = cos(r2547809);
double r2547815 = sin(r2547812);
double r2547816 = sin(r2547809);
double r2547817 = r2547815 * r2547816;
double r2547818 = r2547817 + r2547813;
double r2547819 = -r2547818;
double r2547820 = fma(r2547813, r2547814, r2547819);
double r2547821 = 1.6288612552274203e-35;
bool r2547822 = r2547809 <= r2547821;
double r2547823 = r2547812 * r2547812;
double r2547824 = 0.16666666666666666;
double r2547825 = r2547823 * r2547824;
double r2547826 = -0.5;
double r2547827 = r2547809 * r2547826;
double r2547828 = fma(r2547825, r2547812, r2547827);
double r2547829 = r2547828 - r2547812;
double r2547830 = r2547809 * r2547829;
double r2547831 = r2547813 * r2547814;
double r2547832 = fma(r2547816, r2547815, r2547813);
double r2547833 = r2547831 - r2547832;
double r2547834 = exp(r2547833);
double r2547835 = log(r2547834);
double r2547836 = r2547822 ? r2547830 : r2547835;
double r2547837 = r2547811 ? r2547820 : r2547836;
return r2547837;
}



Bits error versus x



Bits error versus eps
if eps < -3.2621509394801617e-09Initial program 30.7
rmApplied cos-sum1.3
Applied associate--l-1.3
Simplified1.3
rmApplied fma-neg1.3
rmApplied fma-udef1.3
if -3.2621509394801617e-09 < eps < 1.6288612552274203e-35Initial program 48.1
rmApplied cos-sum48.0
Applied associate--l-48.0
Simplified48.0
rmApplied fma-neg48.0
Taylor expanded around 0 31.0
Simplified31.0
if 1.6288612552274203e-35 < eps Initial program 32.9
rmApplied cos-sum5.4
Applied associate--l-5.4
Simplified5.4
rmApplied fma-neg5.4
rmApplied fma-udef5.4
rmApplied add-log-exp5.5
Simplified5.5
Final simplification16.3
herbie shell --seed 2019192 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
(- (cos (+ x eps)) (cos x)))