Average Error: 37.5 → 0.5
Time: 19.7s
Precision: 64
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.1998709236678226 \cdot 10^{-08}:\\ \;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\ \mathbf{elif}\;\varepsilon \le 1.1087986248072222 \cdot 10^{-08}:\\ \;\;\;\;\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 -1.1998709236678226 \cdot 10^{-08}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\

\mathbf{elif}\;\varepsilon \le 1.1087986248072222 \cdot 10^{-08}:\\
\;\;\;\;\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 r4743332 = x;
        double r4743333 = eps;
        double r4743334 = r4743332 + r4743333;
        double r4743335 = sin(r4743334);
        double r4743336 = sin(r4743332);
        double r4743337 = r4743335 - r4743336;
        return r4743337;
}

double f(double x, double eps) {
        double r4743338 = eps;
        double r4743339 = -1.1998709236678226e-08;
        bool r4743340 = r4743338 <= r4743339;
        double r4743341 = x;
        double r4743342 = cos(r4743341);
        double r4743343 = sin(r4743338);
        double r4743344 = r4743342 * r4743343;
        double r4743345 = sin(r4743341);
        double r4743346 = r4743344 - r4743345;
        double r4743347 = cos(r4743338);
        double r4743348 = r4743345 * r4743347;
        double r4743349 = r4743346 + r4743348;
        double r4743350 = 1.1087986248072222e-08;
        bool r4743351 = r4743338 <= r4743350;
        double r4743352 = 2.0;
        double r4743353 = r4743338 / r4743352;
        double r4743354 = sin(r4743353);
        double r4743355 = fma(r4743352, r4743341, r4743338);
        double r4743356 = r4743355 / r4743352;
        double r4743357 = cos(r4743356);
        double r4743358 = r4743354 * r4743357;
        double r4743359 = r4743358 * r4743352;
        double r4743360 = r4743348 + r4743344;
        double r4743361 = r4743360 - r4743345;
        double r4743362 = r4743351 ? r4743359 : r4743361;
        double r4743363 = r4743340 ? r4743349 : r4743362;
        return r4743363;
}

Error

Bits error versus x

Bits error versus eps

Target

Original37.5
Target15.6
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 3 regimes
  2. if eps < -1.1998709236678226e-08

    1. Initial program 31.1

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

      \[\leadsto \color{blue}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)} - \sin x\]
    4. Applied associate--l+0.6

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

    if -1.1998709236678226e-08 < eps < 1.1087986248072222e-08

    1. Initial program 44.4

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

      \[\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.3

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

    if 1.1087986248072222e-08 < eps

    1. Initial program 30.9

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -1.1998709236678226 \cdot 10^{-08}:\\ \;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\ \mathbf{elif}\;\varepsilon \le 1.1087986248072222 \cdot 10^{-08}:\\ \;\;\;\;\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 2019162 +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)))