Average Error: 37.1 → 0.3
Time: 7.2s
Precision: 64
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -0.0328694148284930307:\\ \;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\ \mathbf{elif}\;\varepsilon \le 4.01911916950481984:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\sin x, \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \frac{1}{720} \cdot {\varepsilon}^{6}\right)\right), \cos x \cdot \sin \varepsilon\right)\\ \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 -0.0328694148284930307:\\
\;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\

\mathbf{elif}\;\varepsilon \le 4.01911916950481984:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\sin x, \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \frac{1}{720} \cdot {\varepsilon}^{6}\right)\right), \cos x \cdot \sin \varepsilon\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 r133723 = x;
        double r133724 = eps;
        double r133725 = r133723 + r133724;
        double r133726 = sin(r133725);
        double r133727 = sin(r133723);
        double r133728 = r133726 - r133727;
        return r133728;
}

double f(double x, double eps) {
        double r133729 = eps;
        double r133730 = -0.03286941482849303;
        bool r133731 = r133729 <= r133730;
        double r133732 = x;
        double r133733 = sin(r133732);
        double r133734 = cos(r133729);
        double r133735 = r133733 * r133734;
        double r133736 = cos(r133732);
        double r133737 = sin(r133729);
        double r133738 = r133736 * r133737;
        double r133739 = r133738 - r133733;
        double r133740 = r133735 + r133739;
        double r133741 = 4.01911916950482;
        bool r133742 = r133729 <= r133741;
        double r133743 = 1.0;
        double r133744 = 0.041666666666666664;
        double r133745 = 4.0;
        double r133746 = pow(r133729, r133745);
        double r133747 = 0.5;
        double r133748 = 2.0;
        double r133749 = pow(r133729, r133748);
        double r133750 = 0.001388888888888889;
        double r133751 = 6.0;
        double r133752 = pow(r133729, r133751);
        double r133753 = r133750 * r133752;
        double r133754 = fma(r133747, r133749, r133753);
        double r133755 = -r133754;
        double r133756 = fma(r133744, r133746, r133755);
        double r133757 = fma(r133733, r133756, r133738);
        double r133758 = r133743 * r133757;
        double r133759 = r133735 + r133738;
        double r133760 = r133759 - r133733;
        double r133761 = r133742 ? r133758 : r133760;
        double r133762 = r133731 ? r133740 : r133761;
        return r133762;
}

Error

Bits error versus x

Bits error versus eps

Target

Original37.1
Target14.4
Herbie0.3
\[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 < -0.03286941482849303

    1. Initial program 29.1

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

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

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

    if -0.03286941482849303 < eps < 4.01911916950482

    1. Initial program 44.4

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

      \[\leadsto \color{blue}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)} - \sin x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity43.5

      \[\leadsto \left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \color{blue}{1 \cdot \sin x}\]
    6. Applied *-un-lft-identity43.5

      \[\leadsto \color{blue}{1 \cdot \left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right)} - 1 \cdot \sin x\]
    7. Applied distribute-lft-out--43.5

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

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\sin x, \cos \varepsilon - 1, \cos x \cdot \sin \varepsilon\right)}\]
    9. Taylor expanded around 0 0.2

      \[\leadsto 1 \cdot \mathsf{fma}\left(\sin x, \color{blue}{\frac{1}{24} \cdot {\varepsilon}^{4} - \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \frac{1}{720} \cdot {\varepsilon}^{6}\right)}, \cos x \cdot \sin \varepsilon\right)\]
    10. Simplified0.2

      \[\leadsto 1 \cdot \mathsf{fma}\left(\sin x, \color{blue}{\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \frac{1}{720} \cdot {\varepsilon}^{6}\right)\right)}, \cos x \cdot \sin \varepsilon\right)\]

    if 4.01911916950482 < eps

    1. Initial program 29.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -0.0328694148284930307:\\ \;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\ \mathbf{elif}\;\varepsilon \le 4.01911916950481984:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\sin x, \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \frac{1}{720} \cdot {\varepsilon}^{6}\right)\right), \cos x \cdot \sin \varepsilon\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\ \end{array}\]

Reproduce

herbie shell --seed 2020035 +o rules:numerics
(FPCore (x eps)
  :name "2sin (example 3.3)"
  :precision binary64

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

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