\sin \left(x + \varepsilon\right) - \sin x
\cos x \cdot \sin \varepsilon + \left(\cos \varepsilon - 1\right) \cdot \sin x
double f(double x, double eps) {
double r99450 = x;
double r99451 = eps;
double r99452 = r99450 + r99451;
double r99453 = sin(r99452);
double r99454 = sin(r99450);
double r99455 = r99453 - r99454;
return r99455;
}
double f(double x, double eps) {
double r99456 = x;
double r99457 = cos(r99456);
double r99458 = eps;
double r99459 = sin(r99458);
double r99460 = r99457 * r99459;
double r99461 = cos(r99458);
double r99462 = 1.0;
double r99463 = r99461 - r99462;
double r99464 = sin(r99456);
double r99465 = r99463 * r99464;
double r99466 = r99460 + r99465;
return r99466;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.5 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
Initial program 37.5
rmApplied sin-sum22.0
rmApplied *-un-lft-identity22.0
Applied *-un-lft-identity22.0
Applied distribute-lft-out--22.0
Simplified0.4
rmApplied add-cbrt-cube0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2019291
(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)))