\cos \left(x + \varepsilon\right) - \cos x
-2 \cdot \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin x + \cos x \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)double f(double x, double eps) {
double r63687 = x;
double r63688 = eps;
double r63689 = r63687 + r63688;
double r63690 = cos(r63689);
double r63691 = cos(r63687);
double r63692 = r63690 - r63691;
return r63692;
}
double f(double x, double eps) {
double r63693 = -2.0;
double r63694 = 0.5;
double r63695 = eps;
double r63696 = r63694 * r63695;
double r63697 = cos(r63696);
double r63698 = x;
double r63699 = sin(r63698);
double r63700 = r63697 * r63699;
double r63701 = cos(r63698);
double r63702 = sin(r63696);
double r63703 = r63701 * r63702;
double r63704 = r63700 + r63703;
double r63705 = log1p(r63704);
double r63706 = expm1(r63705);
double r63707 = 2.0;
double r63708 = r63695 / r63707;
double r63709 = sin(r63708);
double r63710 = r63706 * r63709;
double r63711 = r63693 * r63710;
return r63711;
}



Bits error versus x



Bits error versus eps
Results
Initial program 39.5
rmApplied diff-cos34.0
Simplified15.1
rmApplied expm1-log1p-u15.2
Simplified15.1
rmApplied fma-udef15.1
Applied sin-sum0.4
Simplified0.4
Simplified0.4
rmApplied *-un-lft-identity0.4
Final simplification0.4
herbie shell --seed 2020045 +o rules:numerics
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))