\sin \left(x + \varepsilon\right) - \sin x
\frac{-\sin x \cdot \left(\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon + 1} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r92744 = x;
double r92745 = eps;
double r92746 = r92744 + r92745;
double r92747 = sin(r92746);
double r92748 = sin(r92744);
double r92749 = r92747 - r92748;
return r92749;
}
double f(double x, double eps) {
double r92750 = x;
double r92751 = sin(r92750);
double r92752 = eps;
double r92753 = sin(r92752);
double r92754 = r92753 * r92753;
double r92755 = r92751 * r92754;
double r92756 = -r92755;
double r92757 = cos(r92752);
double r92758 = 1.0;
double r92759 = r92757 + r92758;
double r92760 = r92756 / r92759;
double r92761 = cos(r92750);
double r92762 = r92761 * r92753;
double r92763 = r92760 + r92762;
return r92763;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 14.8 |
| Herbie | 0.4 |
Initial program 37.3
rmApplied sin-sum22.3
rmApplied *-un-lft-identity22.3
Applied *-un-lft-identity22.3
Applied distribute-lft-out--22.3
Simplified0.4
rmApplied flip--0.5
Applied associate-*r/0.5
Simplified0.5
rmApplied sub-1-cos0.4
Applied distribute-rgt-neg-out0.4
Final simplification0.4
herbie shell --seed 2020039
(FPCore (x eps)
:name "2sin (example 3.3)"
:precision binary64
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))