\sin \left(x + \varepsilon\right) - \sin x
\sin x \cdot \frac{{\left(\cos \varepsilon\right)}^{3} - 1}{\cos \varepsilon \cdot \left(\cos \varepsilon + 1\right) + 1} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r129428 = x;
double r129429 = eps;
double r129430 = r129428 + r129429;
double r129431 = sin(r129430);
double r129432 = sin(r129428);
double r129433 = r129431 - r129432;
return r129433;
}
double f(double x, double eps) {
double r129434 = x;
double r129435 = sin(r129434);
double r129436 = eps;
double r129437 = cos(r129436);
double r129438 = 3.0;
double r129439 = pow(r129437, r129438);
double r129440 = 1.0;
double r129441 = r129439 - r129440;
double r129442 = r129437 + r129440;
double r129443 = r129437 * r129442;
double r129444 = r129443 + r129440;
double r129445 = r129441 / r129444;
double r129446 = r129435 * r129445;
double r129447 = cos(r129434);
double r129448 = sin(r129436);
double r129449 = r129447 * r129448;
double r129450 = r129446 + r129449;
return r129450;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 14.6 |
| Herbie | 0.4 |
Initial program 36.8
rmApplied sin-sum22.2
rmApplied *-un-lft-identity22.2
Applied *-un-lft-identity22.2
Applied distribute-lft-out--22.2
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020059
(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)))