\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 r111543 = x;
double r111544 = eps;
double r111545 = r111543 + r111544;
double r111546 = sin(r111545);
double r111547 = sin(r111543);
double r111548 = r111546 - r111547;
return r111548;
}
double f(double x, double eps) {
double r111549 = x;
double r111550 = sin(r111549);
double r111551 = eps;
double r111552 = sin(r111551);
double r111553 = r111552 * r111552;
double r111554 = -r111553;
double r111555 = r111550 * r111554;
double r111556 = cos(r111551);
double r111557 = 1.0;
double r111558 = r111556 + r111557;
double r111559 = r111555 / r111558;
double r111560 = cos(r111549);
double r111561 = r111560 * r111552;
double r111562 = r111559 + r111561;
return r111562;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.2
rmApplied sin-sum22.1
rmApplied *-un-lft-identity22.1
Applied *-un-lft-identity22.1
Applied distribute-lft-out--22.1
Simplified0.4
rmApplied flip--0.5
Applied associate-*r/0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2019352
(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)))