Average Error: 37.1 → 0.4
Time: 12.4s
Precision: 64
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -8.78183908127777317 \cdot 10^{-9} \lor \neg \left(\varepsilon \le 1.19054048034770088 \cdot 10^{-8}\right):\\ \;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \end{array}\]
\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.78183908127777317 \cdot 10^{-9} \lor \neg \left(\varepsilon \le 1.19054048034770088 \cdot 10^{-8}\right):\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\

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

\end{array}
double f(double x, double eps) {
        double r145649 = x;
        double r145650 = eps;
        double r145651 = r145649 + r145650;
        double r145652 = sin(r145651);
        double r145653 = sin(r145649);
        double r145654 = r145652 - r145653;
        return r145654;
}

double f(double x, double eps) {
        double r145655 = eps;
        double r145656 = -8.781839081277773e-09;
        bool r145657 = r145655 <= r145656;
        double r145658 = 1.1905404803477009e-08;
        bool r145659 = r145655 <= r145658;
        double r145660 = !r145659;
        bool r145661 = r145657 || r145660;
        double r145662 = x;
        double r145663 = sin(r145662);
        double r145664 = cos(r145655);
        double r145665 = r145663 * r145664;
        double r145666 = cos(r145662);
        double r145667 = sin(r145655);
        double r145668 = r145666 * r145667;
        double r145669 = r145665 + r145668;
        double r145670 = r145669 - r145663;
        double r145671 = 2.0;
        double r145672 = r145655 / r145671;
        double r145673 = sin(r145672);
        double r145674 = r145662 + r145655;
        double r145675 = r145674 + r145662;
        double r145676 = r145675 / r145671;
        double r145677 = cos(r145676);
        double r145678 = r145673 * r145677;
        double r145679 = r145671 * r145678;
        double r145680 = r145661 ? r145670 : r145679;
        return r145680;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original37.1
Target15.2
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 2 regimes
  2. if eps < -8.781839081277773e-09 or 1.1905404803477009e-08 < eps

    1. Initial program 30.1

      \[\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 -8.781839081277773e-09 < eps < 1.1905404803477009e-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{\left(x + \varepsilon\right) + x}{2}\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -8.78183908127777317 \cdot 10^{-9} \lor \neg \left(\varepsilon \le 1.19054048034770088 \cdot 10^{-8}\right):\\ \;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\ \mathbf{else}:\\ \;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 
(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)))