\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.21001947811687037525689421214365347132 \cdot 10^{-11}:\\
\;\;\;\;1 \cdot \left(\cos \varepsilon \cdot \cos x + \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\\
\mathbf{elif}\;\varepsilon \le 3.097623705192343513450383904461737927249 \cdot 10^{-6}:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\frac{{\left(\sin x \cdot \sin \varepsilon\right)}^{3} + {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\sin x \cdot \sin \varepsilon, \sin x \cdot \sin \varepsilon - \cos x, \cos x \cdot \cos x\right)}\right)\\
\end{array}double f(double x, double eps) {
double r91817 = x;
double r91818 = eps;
double r91819 = r91817 + r91818;
double r91820 = cos(r91819);
double r91821 = cos(r91817);
double r91822 = r91820 - r91821;
return r91822;
}
double f(double x, double eps) {
double r91823 = eps;
double r91824 = -3.2100194781168704e-11;
bool r91825 = r91823 <= r91824;
double r91826 = 1.0;
double r91827 = cos(r91823);
double r91828 = x;
double r91829 = cos(r91828);
double r91830 = r91827 * r91829;
double r91831 = sin(r91828);
double r91832 = sin(r91823);
double r91833 = fma(r91831, r91832, r91829);
double r91834 = -r91833;
double r91835 = r91830 + r91834;
double r91836 = r91826 * r91835;
double r91837 = 3.0976237051923435e-06;
bool r91838 = r91823 <= r91837;
double r91839 = 0.041666666666666664;
double r91840 = 4.0;
double r91841 = pow(r91823, r91840);
double r91842 = 0.5;
double r91843 = 2.0;
double r91844 = pow(r91823, r91843);
double r91845 = r91842 * r91844;
double r91846 = fma(r91828, r91823, r91845);
double r91847 = -r91846;
double r91848 = fma(r91839, r91841, r91847);
double r91849 = r91826 * r91848;
double r91850 = r91831 * r91832;
double r91851 = 3.0;
double r91852 = pow(r91850, r91851);
double r91853 = pow(r91829, r91851);
double r91854 = r91852 + r91853;
double r91855 = r91850 - r91829;
double r91856 = r91829 * r91829;
double r91857 = fma(r91850, r91855, r91856);
double r91858 = r91854 / r91857;
double r91859 = -r91858;
double r91860 = fma(r91827, r91829, r91859);
double r91861 = r91826 * r91860;
double r91862 = r91838 ? r91849 : r91861;
double r91863 = r91825 ? r91836 : r91862;
return r91863;
}



Bits error versus x



Bits error versus eps
if eps < -3.2100194781168704e-11Initial program 30.5
rmApplied cos-sum1.7
rmApplied *-un-lft-identity1.7
Applied *-un-lft-identity1.7
Applied distribute-lft-out--1.7
Simplified1.6
rmApplied fma-udef1.6
if -3.2100194781168704e-11 < eps < 3.0976237051923435e-06Initial program 49.4
rmApplied cos-sum49.0
rmApplied *-un-lft-identity49.0
Applied *-un-lft-identity49.0
Applied distribute-lft-out--49.0
Simplified49.0
rmApplied fma-udef49.0
Taylor expanded around 0 31.2
Simplified31.2
if 3.0976237051923435e-06 < eps Initial program 30.4
rmApplied cos-sum1.0
rmApplied *-un-lft-identity1.0
Applied *-un-lft-identity1.0
Applied distribute-lft-out--1.0
Simplified0.9
rmApplied fma-udef1.0
rmApplied flip3-+1.1
Simplified1.0
Final simplification16.0
herbie shell --seed 2019352 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))