\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 r103065 = x;
double r103066 = eps;
double r103067 = r103065 + r103066;
double r103068 = sin(r103067);
double r103069 = sin(r103065);
double r103070 = r103068 - r103069;
return r103070;
}
double f(double x, double eps) {
double r103071 = x;
double r103072 = cos(r103071);
double r103073 = eps;
double r103074 = sin(r103073);
double r103075 = r103072 * r103074;
double r103076 = cos(r103073);
double r103077 = 1.0;
double r103078 = r103076 - r103077;
double r103079 = sin(r103071);
double r103080 = r103078 * r103079;
double r103081 = r103075 + r103080;
return r103081;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.1
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 2019303
(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)))