\sin \left(x + \varepsilon\right) - \sin x
2 \cdot \left(\left(\cos x \cdot \cos \left(\varepsilon \cdot \frac{1}{2}\right) - \log \left(e^{\sin x \cdot \sin \left(\varepsilon \cdot \frac{1}{2}\right)}\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)double f(double x, double eps) {
double r8334704 = x;
double r8334705 = eps;
double r8334706 = r8334704 + r8334705;
double r8334707 = sin(r8334706);
double r8334708 = sin(r8334704);
double r8334709 = r8334707 - r8334708;
return r8334709;
}
double f(double x, double eps) {
double r8334710 = 2.0;
double r8334711 = x;
double r8334712 = cos(r8334711);
double r8334713 = eps;
double r8334714 = 0.5;
double r8334715 = r8334713 * r8334714;
double r8334716 = cos(r8334715);
double r8334717 = r8334712 * r8334716;
double r8334718 = sin(r8334711);
double r8334719 = sin(r8334715);
double r8334720 = r8334718 * r8334719;
double r8334721 = exp(r8334720);
double r8334722 = log(r8334721);
double r8334723 = r8334717 - r8334722;
double r8334724 = r8334713 / r8334710;
double r8334725 = sin(r8334724);
double r8334726 = r8334723 * r8334725;
double r8334727 = r8334710 * r8334726;
return r8334727;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.2 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
Initial program 37.2
rmApplied diff-sin37.6
Simplified15.1
Taylor expanded around inf 15.1
Simplified15.1
rmApplied fma-udef15.1
Applied cos-sum0.3
rmApplied add-log-exp0.4
Final simplification0.4
herbie shell --seed 2019120 +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)))