\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}:\\
\;\;\;\;\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right) \cdot 2\\
\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 r1946769 = x;
double r1946770 = eps;
double r1946771 = r1946769 + r1946770;
double r1946772 = sin(r1946771);
double r1946773 = sin(r1946769);
double r1946774 = r1946772 - r1946773;
return r1946774;
}
double f(double x, double eps) {
double r1946775 = eps;
double r1946776 = -7.672969354734922e-09;
bool r1946777 = r1946775 <= r1946776;
double r1946778 = x;
double r1946779 = sin(r1946778);
double r1946780 = cos(r1946775);
double r1946781 = r1946779 * r1946780;
double r1946782 = cos(r1946778);
double r1946783 = sin(r1946775);
double r1946784 = r1946782 * r1946783;
double r1946785 = r1946781 + r1946784;
double r1946786 = r1946785 - r1946779;
double r1946787 = 1.4909178493851906e-15;
bool r1946788 = r1946775 <= r1946787;
double r1946789 = 2.0;
double r1946790 = r1946775 / r1946789;
double r1946791 = sin(r1946790);
double r1946792 = fma(r1946789, r1946778, r1946775);
double r1946793 = r1946792 / r1946789;
double r1946794 = cos(r1946793);
double r1946795 = r1946791 * r1946794;
double r1946796 = r1946795 * r1946789;
double r1946797 = r1946788 ? r1946796 : r1946786;
double r1946798 = r1946777 ? r1946786 : r1946797;
return r1946798;
}




Bits error versus x




Bits error versus eps
| 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 +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)))