\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 r124722 = x;
double r124723 = eps;
double r124724 = r124722 + r124723;
double r124725 = sin(r124724);
double r124726 = sin(r124722);
double r124727 = r124725 - r124726;
return r124727;
}
double f(double x, double eps) {
double r124728 = x;
double r124729 = sin(r124728);
double r124730 = eps;
double r124731 = cos(r124730);
double r124732 = r124729 * r124731;
double r124733 = -r124729;
double r124734 = r124732 + r124733;
double r124735 = cos(r124728);
double r124736 = sin(r124730);
double r124737 = r124735 * r124736;
double r124738 = r124734 + r124737;
return r124738;
}




Bits error versus x




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