\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, -\frac{\sin \varepsilon}{1} \cdot \tan \left(\frac{\varepsilon}{2}\right), \cos x \cdot \sin \varepsilon\right) + \mathsf{fma}\left(-\sin x, 1, \sin x\right)double f(double x, double eps) {
double r108479 = x;
double r108480 = eps;
double r108481 = r108479 + r108480;
double r108482 = sin(r108481);
double r108483 = sin(r108479);
double r108484 = r108482 - r108483;
return r108484;
}
double f(double x, double eps) {
double r108485 = x;
double r108486 = sin(r108485);
double r108487 = eps;
double r108488 = sin(r108487);
double r108489 = 1.0;
double r108490 = r108488 / r108489;
double r108491 = 2.0;
double r108492 = r108487 / r108491;
double r108493 = tan(r108492);
double r108494 = r108490 * r108493;
double r108495 = -r108494;
double r108496 = cos(r108485);
double r108497 = r108496 * r108488;
double r108498 = fma(r108486, r108495, r108497);
double r108499 = -r108486;
double r108500 = fma(r108499, r108489, r108486);
double r108501 = r108498 + r108500;
return r108501;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 14.9 |
| Herbie | 0.2 |
Initial program 37.1
rmApplied sin-sum22.0
rmApplied add-cube-cbrt22.6
Applied add-sqr-sqrt43.2
Applied prod-diff43.2
Simplified22.4
Simplified0.4
rmApplied flip--0.5
Simplified0.5
rmApplied sub-1-cos0.3
Applied distribute-frac-neg0.3
Simplified0.2
Final simplification0.2
herbie shell --seed 2019347 +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)))