\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.672969354734922 \cdot 10^{-09}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 1.4909178493851906 \cdot 10^{-15}:\\
\;\;\;\;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 r2216781 = x;
double r2216782 = eps;
double r2216783 = r2216781 + r2216782;
double r2216784 = sin(r2216783);
double r2216785 = sin(r2216781);
double r2216786 = r2216784 - r2216785;
return r2216786;
}
double f(double x, double eps) {
double r2216787 = eps;
double r2216788 = -7.672969354734922e-09;
bool r2216789 = r2216787 <= r2216788;
double r2216790 = x;
double r2216791 = sin(r2216790);
double r2216792 = cos(r2216787);
double r2216793 = r2216791 * r2216792;
double r2216794 = cos(r2216790);
double r2216795 = sin(r2216787);
double r2216796 = r2216794 * r2216795;
double r2216797 = r2216793 + r2216796;
double r2216798 = r2216797 - r2216791;
double r2216799 = 1.4909178493851906e-15;
bool r2216800 = r2216787 <= r2216799;
double r2216801 = 2.0;
double r2216802 = 0.5;
double r2216803 = r2216802 * r2216787;
double r2216804 = sin(r2216803);
double r2216805 = r2216790 + r2216787;
double r2216806 = r2216805 + r2216790;
double r2216807 = r2216806 / r2216801;
double r2216808 = cos(r2216807);
double r2216809 = r2216804 * r2216808;
double r2216810 = r2216801 * r2216809;
double r2216811 = r2216800 ? r2216810 : r2216798;
double r2216812 = r2216789 ? r2216798 : r2216811;
return r2216812;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 14.7 |
| Herbie | 0.5 |
if eps < -7.672969354734922e-09 or 1.4909178493851906e-15 < eps Initial program 29.4
rmApplied sin-sum0.7
if -7.672969354734922e-09 < eps < 1.4909178493851906e-15Initial program 44.9
rmApplied diff-sin44.9
Simplified0.2
Final simplification0.5
herbie shell --seed 2019154
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))