\sin \left(x + \varepsilon\right) - \sin x
2 \cdot \left(\mathsf{fma}\left(\left(\cos \left(\varepsilon \cdot \frac{1}{2}\right)\right), \left(\cos x\right), \left(-\sin \left(\varepsilon \cdot \frac{1}{2}\right) \cdot \sin x\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)double f(double x, double eps) {
double r12578787 = x;
double r12578788 = eps;
double r12578789 = r12578787 + r12578788;
double r12578790 = sin(r12578789);
double r12578791 = sin(r12578787);
double r12578792 = r12578790 - r12578791;
return r12578792;
}
double f(double x, double eps) {
double r12578793 = 2.0;
double r12578794 = eps;
double r12578795 = 0.5;
double r12578796 = r12578794 * r12578795;
double r12578797 = cos(r12578796);
double r12578798 = x;
double r12578799 = cos(r12578798);
double r12578800 = sin(r12578796);
double r12578801 = sin(r12578798);
double r12578802 = r12578800 * r12578801;
double r12578803 = -r12578802;
double r12578804 = fma(r12578797, r12578799, r12578803);
double r12578805 = r12578794 / r12578793;
double r12578806 = sin(r12578805);
double r12578807 = r12578804 * r12578806;
double r12578808 = r12578793 * r12578807;
return r12578808;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.5 |
| Herbie | 0.3 |
Initial program 37.1
rmApplied diff-sin37.4
Simplified15.5
Taylor expanded around -inf 15.5
Simplified15.5
rmApplied fma-udef15.5
Applied cos-sum0.3
rmApplied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019124 +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)))