\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.6443088649730258 \cdot 10^{-8}:\\
\;\;\;\;\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 4.8831367818885993 \cdot 10^{-8}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)}^{3} - {\left(\cos x\right)}^{3}}{\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right) \cdot \log \left(e^{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) + \cos x}\right) + \cos x \cdot \cos x}\\
\end{array}double f(double x, double eps) {
double r56854 = x;
double r56855 = eps;
double r56856 = r56854 + r56855;
double r56857 = cos(r56856);
double r56858 = cos(r56854);
double r56859 = r56857 - r56858;
return r56859;
}
double f(double x, double eps) {
double r56860 = eps;
double r56861 = -8.644308864973026e-08;
bool r56862 = r56860 <= r56861;
double r56863 = cos(r56860);
double r56864 = x;
double r56865 = cos(r56864);
double r56866 = sin(r56864);
double r56867 = sin(r56860);
double r56868 = fma(r56866, r56867, r56865);
double r56869 = expm1(r56868);
double r56870 = log1p(r56869);
double r56871 = -r56870;
double r56872 = fma(r56863, r56865, r56871);
double r56873 = 4.883136781888599e-08;
bool r56874 = r56860 <= r56873;
double r56875 = 3.0;
double r56876 = pow(r56860, r56875);
double r56877 = 0.041666666666666664;
double r56878 = r56876 * r56877;
double r56879 = 0.5;
double r56880 = fma(r56879, r56860, r56864);
double r56881 = r56878 - r56880;
double r56882 = r56860 * r56881;
double r56883 = r56865 * r56863;
double r56884 = r56866 * r56867;
double r56885 = r56883 - r56884;
double r56886 = pow(r56885, r56875);
double r56887 = pow(r56865, r56875);
double r56888 = r56886 - r56887;
double r56889 = r56863 * r56865;
double r56890 = r56889 - r56884;
double r56891 = r56885 + r56865;
double r56892 = exp(r56891);
double r56893 = log(r56892);
double r56894 = r56890 * r56893;
double r56895 = r56865 * r56865;
double r56896 = r56894 + r56895;
double r56897 = r56888 / r56896;
double r56898 = r56874 ? r56882 : r56897;
double r56899 = r56862 ? r56872 : r56898;
return r56899;
}



Bits error versus x



Bits error versus eps
if eps < -8.644308864973026e-08Initial program 30.6
rmApplied cos-sum1.1
Taylor expanded around inf 1.1
Simplified1.1
rmApplied log1p-expm1-u1.1
if -8.644308864973026e-08 < eps < 4.883136781888599e-08Initial program 49.9
rmApplied cos-sum49.5
Taylor expanded around inf 49.5
Simplified49.5
Taylor expanded around 0 31.0
Simplified31.0
if 4.883136781888599e-08 < eps Initial program 30.4
rmApplied cos-sum1.2
rmApplied flip3--1.4
Simplified1.4
rmApplied add-log-exp1.4
Applied add-log-exp1.4
Applied add-log-exp1.5
Applied diff-log1.5
Applied sum-log1.5
Simplified1.4
Final simplification15.8
herbie shell --seed 2020027 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))