\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.894912541714580426696623582927259121789 \cdot 10^{-4}:\\
\;\;\;\;\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \sin x \cdot \sin \varepsilon\right) - \cos x\\
\mathbf{elif}\;\varepsilon \le 1.339671104451643834974770147505651607389 \cdot 10^{-5}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\
\end{array}double f(double x, double eps) {
double r61042 = x;
double r61043 = eps;
double r61044 = r61042 + r61043;
double r61045 = cos(r61044);
double r61046 = cos(r61042);
double r61047 = r61045 - r61046;
return r61047;
}
double f(double x, double eps) {
double r61048 = eps;
double r61049 = -0.00018949125417145804;
bool r61050 = r61048 <= r61049;
double r61051 = x;
double r61052 = cos(r61051);
double r61053 = cos(r61048);
double r61054 = r61052 * r61053;
double r61055 = expm1(r61054);
double r61056 = log1p(r61055);
double r61057 = sin(r61051);
double r61058 = sin(r61048);
double r61059 = r61057 * r61058;
double r61060 = r61056 - r61059;
double r61061 = r61060 - r61052;
double r61062 = 1.3396711044516438e-05;
bool r61063 = r61048 <= r61062;
double r61064 = 3.0;
double r61065 = pow(r61048, r61064);
double r61066 = 0.041666666666666664;
double r61067 = r61065 * r61066;
double r61068 = 0.5;
double r61069 = fma(r61068, r61048, r61051);
double r61070 = r61067 - r61069;
double r61071 = r61048 * r61070;
double r61072 = fma(r61057, r61058, r61052);
double r61073 = -r61072;
double r61074 = fma(r61053, r61052, r61073);
double r61075 = exp(r61074);
double r61076 = log(r61075);
double r61077 = r61063 ? r61071 : r61076;
double r61078 = r61050 ? r61061 : r61077;
return r61078;
}



Bits error versus x



Bits error versus eps
if eps < -0.00018949125417145804Initial program 29.6
rmApplied cos-sum0.8
rmApplied log1p-expm1-u0.9
if -0.00018949125417145804 < eps < 1.3396711044516438e-05Initial program 49.1
rmApplied cos-sum48.6
rmApplied add-log-exp48.9
Applied add-log-exp48.9
Applied add-log-exp48.7
Applied diff-log48.7
Applied diff-log48.7
Simplified48.6
Taylor expanded around 0 30.7
Simplified30.7
if 1.3396711044516438e-05 < eps Initial program 29.7
rmApplied cos-sum0.9
rmApplied add-log-exp1.0
Applied add-log-exp1.1
Applied add-log-exp1.3
Applied diff-log1.3
Applied diff-log1.4
Simplified1.1
Final simplification15.6
herbie shell --seed 2019356 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))