\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.642672794131257633584719535235763032688 \cdot 10^{-5}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 9.496762876577124763011742607579646069382 \cdot 10^{-9}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\
\end{array}double f(double x, double eps) {
double r57730 = x;
double r57731 = eps;
double r57732 = r57730 + r57731;
double r57733 = sin(r57732);
double r57734 = sin(r57730);
double r57735 = r57733 - r57734;
return r57735;
}
double f(double x, double eps) {
double r57736 = eps;
double r57737 = -9.642672794131258e-05;
bool r57738 = r57736 <= r57737;
double r57739 = x;
double r57740 = sin(r57739);
double r57741 = cos(r57736);
double r57742 = r57740 * r57741;
double r57743 = cos(r57739);
double r57744 = sin(r57736);
double r57745 = r57743 * r57744;
double r57746 = r57742 + r57745;
double r57747 = r57746 - r57740;
double r57748 = 9.496762876577125e-09;
bool r57749 = r57736 <= r57748;
double r57750 = 2.0;
double r57751 = r57736 / r57750;
double r57752 = sin(r57751);
double r57753 = r57739 + r57736;
double r57754 = r57753 + r57739;
double r57755 = r57754 / r57750;
double r57756 = cos(r57755);
double r57757 = r57752 * r57756;
double r57758 = r57750 * r57757;
double r57759 = r57745 - r57740;
double r57760 = r57742 + r57759;
double r57761 = r57749 ? r57758 : r57760;
double r57762 = r57738 ? r57747 : r57761;
return r57762;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.5 |
if eps < -9.642672794131258e-05Initial program 30.2
rmApplied sin-sum0.4
if -9.642672794131258e-05 < eps < 9.496762876577125e-09Initial program 44.9
rmApplied diff-sin44.9
Simplified0.4
if 9.496762876577125e-09 < eps Initial program 28.9
rmApplied sin-sum0.5
Applied associate--l+0.5
Final simplification0.5
herbie shell --seed 2019303
(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)))