\sin \left(x + \varepsilon\right) - \sin x
\sin x \cdot \frac{{\left(\cos \varepsilon\right)}^{3} - 1}{\cos \varepsilon \cdot \log \left(e^{\cos \varepsilon + 1}\right) + 1} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r103403 = x;
double r103404 = eps;
double r103405 = r103403 + r103404;
double r103406 = sin(r103405);
double r103407 = sin(r103403);
double r103408 = r103406 - r103407;
return r103408;
}
double f(double x, double eps) {
double r103409 = x;
double r103410 = sin(r103409);
double r103411 = eps;
double r103412 = cos(r103411);
double r103413 = 3.0;
double r103414 = pow(r103412, r103413);
double r103415 = 1.0;
double r103416 = r103414 - r103415;
double r103417 = r103412 + r103415;
double r103418 = exp(r103417);
double r103419 = log(r103418);
double r103420 = r103412 * r103419;
double r103421 = r103420 + r103415;
double r103422 = r103416 / r103421;
double r103423 = r103410 * r103422;
double r103424 = cos(r103409);
double r103425 = sin(r103411);
double r103426 = r103424 * r103425;
double r103427 = r103423 + r103426;
return r103427;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.7 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 36.7
rmApplied sin-sum21.5
Taylor expanded around inf 21.5
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied sum-log0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020024
(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)))