\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.778095247816633 \cdot 10^{-09}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 1.9528216764299977 \cdot 10^{-08}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\end{array}double f(double x, double eps) {
double r1956559 = x;
double r1956560 = eps;
double r1956561 = r1956559 + r1956560;
double r1956562 = sin(r1956561);
double r1956563 = sin(r1956559);
double r1956564 = r1956562 - r1956563;
return r1956564;
}
double f(double x, double eps) {
double r1956565 = eps;
double r1956566 = -8.778095247816633e-09;
bool r1956567 = r1956565 <= r1956566;
double r1956568 = x;
double r1956569 = sin(r1956568);
double r1956570 = cos(r1956565);
double r1956571 = r1956569 * r1956570;
double r1956572 = cos(r1956568);
double r1956573 = sin(r1956565);
double r1956574 = r1956572 * r1956573;
double r1956575 = r1956571 + r1956574;
double r1956576 = r1956575 - r1956569;
double r1956577 = 1.9528216764299977e-08;
bool r1956578 = r1956565 <= r1956577;
double r1956579 = 2.0;
double r1956580 = 0.5;
double r1956581 = r1956580 * r1956565;
double r1956582 = sin(r1956581);
double r1956583 = r1956568 + r1956565;
double r1956584 = r1956583 + r1956568;
double r1956585 = r1956584 / r1956579;
double r1956586 = cos(r1956585);
double r1956587 = r1956582 * r1956586;
double r1956588 = r1956579 * r1956587;
double r1956589 = r1956578 ? r1956588 : r1956576;
double r1956590 = r1956567 ? r1956576 : r1956589;
return r1956590;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.4 |
| Herbie | 0.4 |
if eps < -8.778095247816633e-09 or 1.9528216764299977e-08 < eps Initial program 30.1
rmApplied sin-sum0.5
if -8.778095247816633e-09 < eps < 1.9528216764299977e-08Initial program 44.6
rmApplied diff-sin44.6
Simplified0.3
Final simplification0.4
herbie shell --seed 2019152
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))