\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.0538197704106062 \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) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\\
\mathbf{elif}\;\varepsilon \le 3.27571737283016462 \cdot 10^{-56}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)\right) - \cos x\\
\end{array}double f(double x, double eps) {
double r61771 = x;
double r61772 = eps;
double r61773 = r61771 + r61772;
double r61774 = cos(r61773);
double r61775 = cos(r61771);
double r61776 = r61774 - r61775;
return r61776;
}
double f(double x, double eps) {
double r61777 = eps;
double r61778 = -1.0538197704106062e-08;
bool r61779 = r61777 <= r61778;
double r61780 = cos(r61777);
double r61781 = x;
double r61782 = cos(r61781);
double r61783 = sin(r61781);
double r61784 = sin(r61777);
double r61785 = fma(r61783, r61784, r61782);
double r61786 = expm1(r61785);
double r61787 = log1p(r61786);
double r61788 = -r61787;
double r61789 = fma(r61780, r61782, r61788);
double r61790 = -r61782;
double r61791 = 1.0;
double r61792 = fma(r61790, r61791, r61782);
double r61793 = r61789 + r61792;
double r61794 = 3.2757173728301646e-56;
bool r61795 = r61777 <= r61794;
double r61796 = 0.041666666666666664;
double r61797 = 4.0;
double r61798 = pow(r61777, r61797);
double r61799 = 0.5;
double r61800 = 2.0;
double r61801 = pow(r61777, r61800);
double r61802 = r61799 * r61801;
double r61803 = fma(r61781, r61777, r61802);
double r61804 = -r61803;
double r61805 = fma(r61796, r61798, r61804);
double r61806 = r61805 + r61792;
double r61807 = r61782 * r61780;
double r61808 = r61783 * r61784;
double r61809 = r61807 - r61808;
double r61810 = log1p(r61809);
double r61811 = expm1(r61810);
double r61812 = r61811 - r61782;
double r61813 = r61795 ? r61806 : r61812;
double r61814 = r61779 ? r61793 : r61813;
return r61814;
}



Bits error versus x



Bits error versus eps
if eps < -1.0538197704106062e-08Initial program 31.0
rmApplied cos-sum1.1
rmApplied add-cube-cbrt1.5
Applied add-sqr-sqrt32.7
Applied prod-diff32.7
Simplified1.1
Simplified1.1
rmApplied log1p-expm1-u1.1
if -1.0538197704106062e-08 < eps < 3.2757173728301646e-56Initial program 48.4
rmApplied cos-sum48.2
rmApplied add-cube-cbrt48.8
Applied add-sqr-sqrt49.5
Applied prod-diff49.6
Simplified48.9
Simplified48.2
rmApplied fma-udef48.2
Taylor expanded around 0 30.7
Simplified30.7
if 3.2757173728301646e-56 < eps Initial program 34.9
rmApplied cos-sum8.7
rmApplied expm1-log1p-u8.9
Final simplification16.5
herbie shell --seed 2020033 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))