\sin \left(x + \varepsilon\right) - \sin x
\cos x \cdot \sin \varepsilon + \frac{\sin x}{\frac{\left(\cos \varepsilon \cdot \cos \varepsilon + 1\right) + \cos \varepsilon}{{\left(\cos \varepsilon\right)}^{3} - {1}^{3}}}double f(double x, double eps) {
double r70000 = x;
double r70001 = eps;
double r70002 = r70000 + r70001;
double r70003 = sin(r70002);
double r70004 = sin(r70000);
double r70005 = r70003 - r70004;
return r70005;
}
double f(double x, double eps) {
double r70006 = x;
double r70007 = cos(r70006);
double r70008 = eps;
double r70009 = sin(r70008);
double r70010 = r70007 * r70009;
double r70011 = sin(r70006);
double r70012 = cos(r70008);
double r70013 = r70012 * r70012;
double r70014 = 1.0;
double r70015 = r70013 + r70014;
double r70016 = r70015 + r70012;
double r70017 = 3.0;
double r70018 = pow(r70012, r70017);
double r70019 = pow(r70014, r70017);
double r70020 = r70018 - r70019;
double r70021 = r70016 / r70020;
double r70022 = r70011 / r70021;
double r70023 = r70010 + r70022;
return r70023;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.8
rmApplied sin-sum21.5
Applied associate--l+21.6
Taylor expanded around inf 21.5
Simplified0.4
rmApplied flip3--0.4
Applied associate-*r/0.4
Final simplification0.4
herbie shell --seed 2019298
(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)))