\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.1161292204334507 \cdot 10^{-7} \lor \neg \left(\varepsilon \le 1.174838876346265 \cdot 10^{-8}\right):\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{else}:\\
\;\;\;\;\left(\cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot 2\\
\end{array}double f(double x, double eps) {
double r105753 = x;
double r105754 = eps;
double r105755 = r105753 + r105754;
double r105756 = sin(r105755);
double r105757 = sin(r105753);
double r105758 = r105756 - r105757;
return r105758;
}
double f(double x, double eps) {
double r105759 = eps;
double r105760 = -1.1161292204334507e-07;
bool r105761 = r105759 <= r105760;
double r105762 = 1.174838876346265e-08;
bool r105763 = r105759 <= r105762;
double r105764 = !r105763;
bool r105765 = r105761 || r105764;
double r105766 = x;
double r105767 = sin(r105766);
double r105768 = cos(r105759);
double r105769 = r105767 * r105768;
double r105770 = cos(r105766);
double r105771 = sin(r105759);
double r105772 = r105770 * r105771;
double r105773 = r105769 + r105772;
double r105774 = r105773 - r105767;
double r105775 = r105766 + r105759;
double r105776 = r105775 + r105766;
double r105777 = 2.0;
double r105778 = r105776 / r105777;
double r105779 = cos(r105778);
double r105780 = r105759 / r105777;
double r105781 = sin(r105780);
double r105782 = r105779 * r105781;
double r105783 = r105782 * r105777;
double r105784 = r105765 ? r105774 : r105783;
return r105784;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.4 |
|---|---|
| Target | 15.1 |
| Herbie | 0.5 |
if eps < -1.1161292204334507e-07 or 1.174838876346265e-08 < eps Initial program 30.0
rmApplied sin-sum0.6
if -1.1161292204334507e-07 < eps < 1.174838876346265e-08Initial program 45.1
rmApplied diff-sin45.1
Simplified0.4
Final simplification0.5
herbie shell --seed 2020047 +o rules:numerics
(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)))