\sin \left(x + \varepsilon\right) - \sin x
2 \cdot \left(\mathsf{fma}\left(\cos \left(\varepsilon \cdot \frac{1}{2}\right), \cos x, \sin x \cdot \left(-\sin \left(\varepsilon \cdot \frac{1}{2}\right)\right)\right) \cdot \sin \left(\varepsilon \cdot \frac{1}{2}\right)\right)double f(double x, double eps) {
double r3437590 = x;
double r3437591 = eps;
double r3437592 = r3437590 + r3437591;
double r3437593 = sin(r3437592);
double r3437594 = sin(r3437590);
double r3437595 = r3437593 - r3437594;
return r3437595;
}
double f(double x, double eps) {
double r3437596 = 2.0;
double r3437597 = eps;
double r3437598 = 0.5;
double r3437599 = r3437597 * r3437598;
double r3437600 = cos(r3437599);
double r3437601 = x;
double r3437602 = cos(r3437601);
double r3437603 = sin(r3437601);
double r3437604 = sin(r3437599);
double r3437605 = -r3437604;
double r3437606 = r3437603 * r3437605;
double r3437607 = fma(r3437600, r3437602, r3437606);
double r3437608 = r3437607 * r3437604;
double r3437609 = r3437596 * r3437608;
return r3437609;
}




Bits error versus x




Bits error versus eps
| Original | 37.3 |
|---|---|
| Target | 15.1 |
| Herbie | 0.3 |
Initial program 37.3
rmApplied diff-sin37.6
Simplified15.2
Taylor expanded around inf 15.2
Simplified15.1
rmApplied fma-udef15.1
Applied cos-sum0.3
rmApplied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019151 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))