\sin \left(x + \varepsilon\right) - \sin x
\log \left(e^{\sin x \cdot \left(\cos \varepsilon - 1\right)}\right) + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r566 = x;
double r567 = eps;
double r568 = r566 + r567;
double r569 = sin(r568);
double r570 = sin(r566);
double r571 = r569 - r570;
return r571;
}
double f(double x, double eps) {
double r572 = x;
double r573 = sin(r572);
double r574 = eps;
double r575 = cos(r574);
double r576 = 1.0;
double r577 = r575 - r576;
double r578 = r573 * r577;
double r579 = exp(r578);
double r580 = log(r579);
double r581 = cos(r572);
double r582 = sin(r574);
double r583 = r581 * r582;
double r584 = r580 + r583;
return r584;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.6 |
|---|---|
| Target | 15.4 |
| Herbie | 0.5 |
Initial program 37.6
rmApplied sin-sum22.1
rmApplied *-un-lft-identity22.1
Applied *-un-lft-identity22.1
Applied distribute-lft-out--22.1
Simplified0.4
rmApplied fma-udef0.4
rmApplied add-log-exp0.5
Final simplification0.5
herbie shell --seed 2020025 +o rules:numerics
(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)))