\sin \left(x + \varepsilon\right) - \sin x
\sin x \cdot \frac{-\sin \varepsilon \cdot \sin \varepsilon}{\cos \varepsilon + 1} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r145289 = x;
double r145290 = eps;
double r145291 = r145289 + r145290;
double r145292 = sin(r145291);
double r145293 = sin(r145289);
double r145294 = r145292 - r145293;
return r145294;
}
double f(double x, double eps) {
double r145295 = x;
double r145296 = sin(r145295);
double r145297 = eps;
double r145298 = sin(r145297);
double r145299 = r145298 * r145298;
double r145300 = -r145299;
double r145301 = cos(r145297);
double r145302 = 1.0;
double r145303 = r145301 + r145302;
double r145304 = r145300 / r145303;
double r145305 = r145296 * r145304;
double r145306 = cos(r145295);
double r145307 = r145306 * r145298;
double r145308 = r145305 + r145307;
return r145308;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.3 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum21.4
Taylor expanded around inf 21.4
Simplified0.4
rmApplied add-cbrt-cube0.4
Simplified0.4
rmApplied flip--0.5
Applied cube-div0.5
Applied cbrt-div0.5
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019354
(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)))