\sin \left(x + \varepsilon\right) - \sin x
\frac{\sin x \cdot \left(-\sin \varepsilon \cdot \sin \varepsilon\right)}{\cos \varepsilon + 1} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r91000 = x;
double r91001 = eps;
double r91002 = r91000 + r91001;
double r91003 = sin(r91002);
double r91004 = sin(r91000);
double r91005 = r91003 - r91004;
return r91005;
}
double f(double x, double eps) {
double r91006 = x;
double r91007 = sin(r91006);
double r91008 = eps;
double r91009 = sin(r91008);
double r91010 = r91009 * r91009;
double r91011 = -r91010;
double r91012 = r91007 * r91011;
double r91013 = cos(r91008);
double r91014 = 1.0;
double r91015 = r91013 + r91014;
double r91016 = r91012 / r91015;
double r91017 = cos(r91006);
double r91018 = r91017 * r91009;
double r91019 = r91016 + r91018;
return r91019;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 14.4 |
| Herbie | 0.3 |
Initial program 37.1
rmApplied sin-sum22.6
Taylor expanded around inf 22.6
Simplified0.4
rmApplied flip--0.5
Applied associate-*r/0.5
Simplified0.5
rmApplied sub-1-cos0.3
Final simplification0.3
herbie shell --seed 2020035
(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)))