\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 r113298 = x;
double r113299 = eps;
double r113300 = r113298 + r113299;
double r113301 = sin(r113300);
double r113302 = sin(r113298);
double r113303 = r113301 - r113302;
return r113303;
}
double f(double x, double eps) {
double r113304 = x;
double r113305 = sin(r113304);
double r113306 = eps;
double r113307 = cos(r113306);
double r113308 = r113305 * r113307;
double r113309 = -r113305;
double r113310 = r113308 + r113309;
double r113311 = cos(r113304);
double r113312 = sin(r113306);
double r113313 = r113311 * r113312;
double r113314 = r113310 + r113313;
return r113314;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.5 |
| Herbie | 0.4 |
Initial program 37.0
rmApplied sin-sum21.3
Applied associate--l+21.3
Taylor expanded around inf 21.3
Simplified0.4
rmApplied fma-udef0.4
rmApplied sub-neg0.4
Applied distribute-lft-in0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020033 +o rules:numerics
(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)))