\sin \left(x + \varepsilon\right) - \sin x
\left(\cos \varepsilon \cdot \sin x + \left(-\sin x\right)\right) + \cos x \cdot \sin \varepsilon
double f(double x, double eps) {
double r133760 = x;
double r133761 = eps;
double r133762 = r133760 + r133761;
double r133763 = sin(r133762);
double r133764 = sin(r133760);
double r133765 = r133763 - r133764;
return r133765;
}
double f(double x, double eps) {
double r133766 = eps;
double r133767 = cos(r133766);
double r133768 = x;
double r133769 = sin(r133768);
double r133770 = r133767 * r133769;
double r133771 = -r133769;
double r133772 = r133770 + r133771;
double r133773 = cos(r133768);
double r133774 = sin(r133766);
double r133775 = r133773 * r133774;
double r133776 = r133772 + r133775;
return r133776;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 15.7 |
| Herbie | 0.4 |
Initial program 37.3
rmApplied sin-sum21.5
Applied associate--l+21.6
Taylor expanded around inf 21.5
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.5
Simplified0.4
rmApplied sub-neg0.4
Applied exp-sum0.4
Applied log-prod0.4
Applied distribute-lft-in0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020002
(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)))