\sin \left(x + \varepsilon\right) - \sin x
\sin x \cdot \frac{\left(-\sin \varepsilon\right) \cdot \sin \varepsilon}{1 + \cos \varepsilon} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r91241 = x;
double r91242 = eps;
double r91243 = r91241 + r91242;
double r91244 = sin(r91243);
double r91245 = sin(r91241);
double r91246 = r91244 - r91245;
return r91246;
}
double f(double x, double eps) {
double r91247 = x;
double r91248 = sin(r91247);
double r91249 = eps;
double r91250 = sin(r91249);
double r91251 = -r91250;
double r91252 = r91251 * r91250;
double r91253 = 1.0;
double r91254 = cos(r91249);
double r91255 = r91253 + r91254;
double r91256 = r91252 / r91255;
double r91257 = r91248 * r91256;
double r91258 = cos(r91247);
double r91259 = r91258 * r91250;
double r91260 = r91257 + r91259;
return r91260;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
Initial program 36.9
Simplified36.9
rmApplied sin-sum21.6
Applied associate--l+0.4
Simplified0.4
rmApplied flip--0.5
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2.0 (* (cos (+ x (/ eps 2.0))) (sin (/ eps 2.0))))
(- (sin (+ x eps)) (sin x)))