\sin \left(x + \varepsilon\right) - \sin x
\frac{\sin x \cdot \left(\log \left(e^{{\left(\cos \varepsilon\right)}^{3}}\right) - 1\right)}{\cos \varepsilon \cdot \cos \varepsilon + \left(1 \cdot 1 + \cos \varepsilon \cdot 1\right)} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r96339 = x;
double r96340 = eps;
double r96341 = r96339 + r96340;
double r96342 = sin(r96341);
double r96343 = sin(r96339);
double r96344 = r96342 - r96343;
return r96344;
}
double f(double x, double eps) {
double r96345 = x;
double r96346 = sin(r96345);
double r96347 = eps;
double r96348 = cos(r96347);
double r96349 = 3.0;
double r96350 = pow(r96348, r96349);
double r96351 = exp(r96350);
double r96352 = log(r96351);
double r96353 = 1.0;
double r96354 = r96352 - r96353;
double r96355 = r96346 * r96354;
double r96356 = r96348 * r96348;
double r96357 = r96353 * r96353;
double r96358 = r96348 * r96353;
double r96359 = r96357 + r96358;
double r96360 = r96356 + r96359;
double r96361 = r96355 / r96360;
double r96362 = cos(r96345);
double r96363 = sin(r96347);
double r96364 = r96362 * r96363;
double r96365 = r96361 + r96364;
return r96365;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.5 |
|---|---|
| Target | 14.9 |
| Herbie | 0.5 |
Initial program 37.5
rmApplied sin-sum22.5
rmApplied *-un-lft-identity22.5
Applied *-un-lft-identity22.5
Applied distribute-lft-out--22.5
Simplified0.4
rmApplied flip3--0.5
Applied associate-*r/0.5
Simplified0.5
rmApplied add-log-exp0.5
Final simplification0.5
herbie shell --seed 2019353
(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)))