\sin \left(x + \varepsilon\right) - \sin x
\cos x \cdot \sin \varepsilon + \left(\cos \varepsilon - 1\right) \cdot \sin x
double f(double x, double eps) {
double r76910 = x;
double r76911 = eps;
double r76912 = r76910 + r76911;
double r76913 = sin(r76912);
double r76914 = sin(r76910);
double r76915 = r76913 - r76914;
return r76915;
}
double f(double x, double eps) {
double r76916 = x;
double r76917 = cos(r76916);
double r76918 = eps;
double r76919 = sin(r76918);
double r76920 = r76917 * r76919;
double r76921 = cos(r76918);
double r76922 = 1.0;
double r76923 = r76921 - r76922;
double r76924 = sin(r76916);
double r76925 = r76923 * r76924;
double r76926 = r76920 + r76925;
return r76926;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.2
rmApplied sin-sum22.1
rmApplied *-un-lft-identity22.1
Applied *-un-lft-identity22.1
Applied distribute-lft-out--22.1
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019308
(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)))