\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.4155618696900624 \cdot 10^{-10}:\\
\;\;\;\;\frac{{\left(\mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)\right)}^{3} - {\left(\cos x\right)}^{3}}{\mathsf{fma}\left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon, \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) + \cos x, \cos x \cdot \cos x\right)}\\
\mathbf{elif}\;\varepsilon \le 1.23057486602459758 \cdot 10^{-7}:\\
\;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \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)\\
\end{array}double f(double x, double eps) {
double r49918 = x;
double r49919 = eps;
double r49920 = r49918 + r49919;
double r49921 = cos(r49920);
double r49922 = cos(r49918);
double r49923 = r49921 - r49922;
return r49923;
}
double f(double x, double eps) {
double r49924 = eps;
double r49925 = -1.4155618696900624e-10;
bool r49926 = r49924 <= r49925;
double r49927 = x;
double r49928 = cos(r49927);
double r49929 = cos(r49924);
double r49930 = sin(r49924);
double r49931 = sin(r49927);
double r49932 = r49930 * r49931;
double r49933 = -r49932;
double r49934 = fma(r49928, r49929, r49933);
double r49935 = 3.0;
double r49936 = pow(r49934, r49935);
double r49937 = pow(r49928, r49935);
double r49938 = r49936 - r49937;
double r49939 = r49929 * r49928;
double r49940 = r49931 * r49930;
double r49941 = r49939 - r49940;
double r49942 = r49934 + r49928;
double r49943 = r49928 * r49928;
double r49944 = fma(r49941, r49942, r49943);
double r49945 = r49938 / r49944;
double r49946 = 1.2305748660245976e-07;
bool r49947 = r49924 <= r49946;
double r49948 = 1.0;
double r49949 = pow(r49924, r49935);
double r49950 = 0.041666666666666664;
double r49951 = r49949 * r49950;
double r49952 = 0.5;
double r49953 = fma(r49952, r49924, r49927);
double r49954 = r49951 - r49953;
double r49955 = r49924 * r49954;
double r49956 = r49948 * r49955;
double r49957 = fma(r49931, r49930, r49928);
double r49958 = expm1(r49957);
double r49959 = log1p(r49958);
double r49960 = -r49959;
double r49961 = fma(r49929, r49928, r49960);
double r49962 = r49948 * r49961;
double r49963 = r49947 ? r49956 : r49962;
double r49964 = r49926 ? r49945 : r49963;
return r49964;
}



Bits error versus x



Bits error versus eps
if eps < -1.4155618696900624e-10Initial program 31.0
rmApplied cos-sum1.5
rmApplied fma-neg1.5
Simplified1.5
rmApplied flip3--1.7
Simplified1.6
if -1.4155618696900624e-10 < eps < 1.2305748660245976e-07Initial program 49.1
rmApplied cos-sum48.8
rmApplied fma-neg48.8
Simplified48.8
rmApplied *-un-lft-identity48.8
Applied *-un-lft-identity48.8
Applied distribute-lft-out--48.8
Simplified48.8
Taylor expanded around 0 30.7
Simplified30.7
if 1.2305748660245976e-07 < eps Initial program 30.3
rmApplied cos-sum1.1
rmApplied fma-neg1.1
Simplified1.1
rmApplied *-un-lft-identity1.1
Applied *-un-lft-identity1.1
Applied distribute-lft-out--1.1
Simplified1.1
rmApplied log1p-expm1-u1.2
Final simplification15.8
herbie shell --seed 2020062 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))