\sin \left(x + \varepsilon\right) - \sin x
\left(\sin x \cdot \cos \varepsilon + \left(-\sin x\right)\right) + \cos x \cdot \sin \varepsilon
double f(double x, double eps) {
double r118941 = x;
double r118942 = eps;
double r118943 = r118941 + r118942;
double r118944 = sin(r118943);
double r118945 = sin(r118941);
double r118946 = r118944 - r118945;
return r118946;
}
double f(double x, double eps) {
double r118947 = x;
double r118948 = sin(r118947);
double r118949 = eps;
double r118950 = cos(r118949);
double r118951 = r118948 * r118950;
double r118952 = -r118948;
double r118953 = r118951 + r118952;
double r118954 = cos(r118947);
double r118955 = sin(r118949);
double r118956 = r118954 * r118955;
double r118957 = r118953 + r118956;
return r118957;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 37.1
rmApplied sin-sum21.9
Taylor expanded around inf 21.9
Simplified0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020046
(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)))