\sin \left(x + \varepsilon\right) - \sin x
\sin x \cdot \frac{\cos \varepsilon \cdot \cos \varepsilon - 1}{\cos \varepsilon + 1} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r126624 = x;
double r126625 = eps;
double r126626 = r126624 + r126625;
double r126627 = sin(r126626);
double r126628 = sin(r126624);
double r126629 = r126627 - r126628;
return r126629;
}
double f(double x, double eps) {
double r126630 = x;
double r126631 = sin(r126630);
double r126632 = eps;
double r126633 = cos(r126632);
double r126634 = r126633 * r126633;
double r126635 = 1.0;
double r126636 = r126634 - r126635;
double r126637 = r126633 + r126635;
double r126638 = r126636 / r126637;
double r126639 = r126631 * r126638;
double r126640 = cos(r126630);
double r126641 = sin(r126632);
double r126642 = r126640 * r126641;
double r126643 = r126639 + r126642;
return r126643;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.5 |
Initial program 37.1
rmApplied sin-sum22.0
rmApplied *-un-lft-identity22.0
Applied *-un-lft-identity22.0
Applied distribute-lft-out--22.0
Simplified0.4
rmApplied flip--0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020062
(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)))