\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.95115446409742782 \cdot 10^{-9} \lor \neg \left(\varepsilon \le 2.17240038846879428 \cdot 10^{-10}\right):\\
\;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\\
\end{array}double f(double x, double eps) {
double r50697 = x;
double r50698 = eps;
double r50699 = r50697 + r50698;
double r50700 = cos(r50699);
double r50701 = cos(r50697);
double r50702 = r50700 - r50701;
return r50702;
}
double f(double x, double eps) {
double r50703 = eps;
double r50704 = -4.951154464097428e-09;
bool r50705 = r50703 <= r50704;
double r50706 = 2.1724003884687943e-10;
bool r50707 = r50703 <= r50706;
double r50708 = !r50707;
bool r50709 = r50705 || r50708;
double r50710 = x;
double r50711 = cos(r50710);
double r50712 = cos(r50703);
double r50713 = sin(r50710);
double r50714 = sin(r50703);
double r50715 = fma(r50713, r50714, r50711);
double r50716 = expm1(r50715);
double r50717 = log1p(r50716);
double r50718 = -r50717;
double r50719 = fma(r50711, r50712, r50718);
double r50720 = 0.16666666666666666;
double r50721 = 3.0;
double r50722 = pow(r50710, r50721);
double r50723 = r50720 * r50722;
double r50724 = r50723 - r50710;
double r50725 = 0.5;
double r50726 = r50703 * r50725;
double r50727 = r50724 - r50726;
double r50728 = r50703 * r50727;
double r50729 = r50709 ? r50719 : r50728;
return r50729;
}



Bits error versus x



Bits error versus eps
if eps < -4.951154464097428e-09 or 2.1724003884687943e-10 < eps Initial program 30.8
rmApplied cos-sum1.4
Applied associate--l-1.4
Simplified1.4
rmApplied fma-neg1.3
rmApplied log1p-expm1-u1.4
if -4.951154464097428e-09 < eps < 2.1724003884687943e-10Initial program 49.2
Taylor expanded around 0 31.8
Simplified31.8
Final simplification15.8
herbie shell --seed 2020060 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))