\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.683954691424825443721279790749335285264 \cdot 10^{-14}:\\
\;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\
\mathbf{elif}\;\varepsilon \le 8.780898233035090036695397525560243152942 \cdot 10^{-11}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\\
\mathbf{else}:\\
\;\;\;\;\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) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\\
\end{array}double f(double x, double eps) {
double r80737 = x;
double r80738 = eps;
double r80739 = r80737 + r80738;
double r80740 = cos(r80739);
double r80741 = cos(r80737);
double r80742 = r80740 - r80741;
return r80742;
}
double f(double x, double eps) {
double r80743 = eps;
double r80744 = -1.6839546914248254e-14;
bool r80745 = r80743 <= r80744;
double r80746 = cos(r80743);
double r80747 = x;
double r80748 = cos(r80747);
double r80749 = sin(r80747);
double r80750 = sin(r80743);
double r80751 = fma(r80749, r80750, r80748);
double r80752 = -r80751;
double r80753 = fma(r80746, r80748, r80752);
double r80754 = exp(r80753);
double r80755 = log(r80754);
double r80756 = 8.78089823303509e-11;
bool r80757 = r80743 <= r80756;
double r80758 = 3.0;
double r80759 = pow(r80743, r80758);
double r80760 = 0.041666666666666664;
double r80761 = r80759 * r80760;
double r80762 = 0.5;
double r80763 = fma(r80762, r80743, r80747);
double r80764 = r80761 - r80763;
double r80765 = r80743 * r80764;
double r80766 = -r80748;
double r80767 = 1.0;
double r80768 = fma(r80766, r80767, r80748);
double r80769 = r80765 + r80768;
double r80770 = expm1(r80751);
double r80771 = log1p(r80770);
double r80772 = -r80771;
double r80773 = fma(r80746, r80748, r80772);
double r80774 = r80773 + r80768;
double r80775 = r80757 ? r80769 : r80774;
double r80776 = r80745 ? r80755 : r80775;
return r80776;
}



Bits error versus x



Bits error versus eps
if eps < -1.6839546914248254e-14Initial program 30.6
rmApplied cos-sum1.9
rmApplied add-log-exp2.0
Applied add-log-exp2.1
Applied add-log-exp2.2
Applied diff-log2.3
Applied diff-log2.3
Simplified2.0
if -1.6839546914248254e-14 < eps < 8.78089823303509e-11Initial program 49.3
rmApplied cos-sum49.1
rmApplied add-cube-cbrt49.6
Applied add-sqr-sqrt50.3
Applied prod-diff50.4
Simplified49.6
Simplified49.1
Taylor expanded around 0 31.3
Simplified31.3
if 8.78089823303509e-11 < eps Initial program 30.1
rmApplied cos-sum1.5
rmApplied add-cube-cbrt1.9
Applied add-sqr-sqrt32.8
Applied prod-diff32.8
Simplified1.5
Simplified1.4
rmApplied log1p-expm1-u1.5
Final simplification16.1
herbie shell --seed 2019346 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))