Average Error: 37.1 → 0.4
Time: 24.8s
Precision: 64
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -9.19400682434756 \cdot 10^{-09}:\\ \;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\ \mathbf{elif}\;\varepsilon \le 7.528901759687215 \cdot 10^{-09}:\\ \;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\ \end{array}\]
double f(double x, double eps) {
        double r9113286 = x;
        double r9113287 = eps;
        double r9113288 = r9113286 + r9113287;
        double r9113289 = sin(r9113288);
        double r9113290 = sin(r9113286);
        double r9113291 = r9113289 - r9113290;
        return r9113291;
}

double f(double x, double eps) {
        double r9113292 = eps;
        double r9113293 = -9.19400682434756e-09;
        bool r9113294 = r9113292 <= r9113293;
        double r9113295 = x;
        double r9113296 = sin(r9113295);
        double r9113297 = cos(r9113292);
        double r9113298 = r9113296 * r9113297;
        double r9113299 = cos(r9113295);
        double r9113300 = sin(r9113292);
        double r9113301 = r9113299 * r9113300;
        double r9113302 = r9113298 + r9113301;
        double r9113303 = r9113302 - r9113296;
        double r9113304 = 7.528901759687215e-09;
        bool r9113305 = r9113292 <= r9113304;
        double r9113306 = 2.0;
        double r9113307 = r9113292 / r9113306;
        double r9113308 = sin(r9113307);
        double r9113309 = r9113295 + r9113292;
        double r9113310 = r9113309 + r9113295;
        double r9113311 = r9113310 / r9113306;
        double r9113312 = cos(r9113311);
        double r9113313 = r9113308 * r9113312;
        double r9113314 = r9113306 * r9113313;
        double r9113315 = r9113301 - r9113296;
        double r9113316 = r9113315 + r9113298;
        double r9113317 = r9113305 ? r9113314 : r9113316;
        double r9113318 = r9113294 ? r9113303 : r9113317;
        return r9113318;
}

\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.19400682434756 \cdot 10^{-09}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\

\mathbf{elif}\;\varepsilon \le 7.528901759687215 \cdot 10^{-09}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\

\end{array}

Error

Bits error versus x

Bits error versus eps

Target

Original37.1
Target15.1
Herbie0.4
\[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 < -9.19400682434756e-09

    1. Initial program 29.7

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

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

    if -9.19400682434756e-09 < eps < 7.528901759687215e-09

    1. Initial program 44.8

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

      \[\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(\cos \left(\frac{x + \left(\varepsilon + x\right)}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)}\]

    if 7.528901759687215e-09 < eps

    1. Initial program 30.0

      \[\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)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -9.19400682434756 \cdot 10^{-09}:\\ \;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\ \mathbf{elif}\;\varepsilon \le 7.528901759687215 \cdot 10^{-09}:\\ \;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\ \end{array}\]

Reproduce

herbie shell --seed 2019101 
(FPCore (x eps)
  :name "2sin (example 3.3)"

  :herbie-target
  (* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))

  (- (sin (+ x eps)) (sin x)))