\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.9043345518077538 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right)\\
\mathbf{elif}\;\varepsilon \le 2.2931718725747495 \cdot 10^{-15}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}\right) - \cos x\\
\end{array}double f(double x, double eps) {
double r68827 = x;
double r68828 = eps;
double r68829 = r68827 + r68828;
double r68830 = cos(r68829);
double r68831 = cos(r68827);
double r68832 = r68830 - r68831;
return r68832;
}
double f(double x, double eps) {
double r68833 = eps;
double r68834 = -0.0003904334551807754;
bool r68835 = r68833 <= r68834;
double r68836 = cos(r68833);
double r68837 = x;
double r68838 = cos(r68837);
double r68839 = sin(r68837);
double r68840 = sin(r68833);
double r68841 = fma(r68839, r68840, r68838);
double r68842 = expm1(r68841);
double r68843 = log1p(r68842);
double r68844 = -r68843;
double r68845 = fma(r68836, r68838, r68844);
double r68846 = 2.2931718725747495e-15;
bool r68847 = r68833 <= r68846;
double r68848 = 3.0;
double r68849 = pow(r68833, r68848);
double r68850 = 0.041666666666666664;
double r68851 = r68849 * r68850;
double r68852 = 0.5;
double r68853 = fma(r68852, r68833, r68837);
double r68854 = r68851 - r68853;
double r68855 = r68833 * r68854;
double r68856 = r68838 * r68836;
double r68857 = r68839 * r68840;
double r68858 = r68856 - r68857;
double r68859 = exp(r68858);
double r68860 = log(r68859);
double r68861 = r68860 - r68838;
double r68862 = r68847 ? r68855 : r68861;
double r68863 = r68835 ? r68845 : r68862;
return r68863;
}



Bits error versus x



Bits error versus eps
if eps < -0.0003904334551807754Initial program 31.0
rmApplied cos-sum0.8
Taylor expanded around inf 0.8
Simplified0.8
rmApplied log1p-expm1-u0.8
if -0.0003904334551807754 < eps < 2.2931718725747495e-15Initial program 49.4
rmApplied cos-sum49.0
Taylor expanded around inf 49.0
Simplified49.0
Taylor expanded around 0 30.8
Simplified30.8
if 2.2931718725747495e-15 < eps Initial program 31.1
rmApplied cos-sum2.3
rmApplied add-log-exp2.5
Applied add-log-exp2.6
Applied diff-log2.6
Simplified2.6
Final simplification15.9
herbie shell --seed 2020064 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))