Average Error: 37.0 → 0.5
Time: 16.8s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus x

Bits error versus eps

Target

Original37.0
Target14.7
Herbie0.5
\[2 \cdot \left(\cos \left(x + \frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\]

Derivation

  1. Split input into 2 regimes
  2. if eps < -7.672969354734922e-09 or 1.4909178493851906e-15 < eps

    1. Initial program 29.4

      \[\sin \left(x + \varepsilon\right) - \sin x\]
    2. Using strategy rm
    3. Applied sin-sum0.7

      \[\leadsto \color{blue}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)} - \sin x\]

    if -7.672969354734922e-09 < eps < 1.4909178493851906e-15

    1. Initial program 44.9

      \[\sin \left(x + \varepsilon\right) - \sin x\]
    2. Using strategy rm
    3. Applied diff-sin44.9

      \[\leadsto \color{blue}{2 \cdot \left(\sin \left(\frac{\left(x + \varepsilon\right) - x}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)}\]
    4. Simplified0.2

      \[\leadsto 2 \cdot \color{blue}{\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \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}\]

Reproduce

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)))