Average Error: 39.6 → 0.7
Time: 12.3s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -2.41467470001176498 \cdot 10^{-4} \lor \neg \left(\varepsilon \le 1.2384991687240798 \cdot 10^{-5}\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;\left(-2 \cdot \sin \left(\varepsilon \cdot \frac{1}{2}\right)\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.41467470001176498 \cdot 10^{-4} \lor \neg \left(\varepsilon \le 1.2384991687240798 \cdot 10^{-5}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

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

\end{array}
double f(double x, double eps) {
        double r50552 = x;
        double r50553 = eps;
        double r50554 = r50552 + r50553;
        double r50555 = cos(r50554);
        double r50556 = cos(r50552);
        double r50557 = r50555 - r50556;
        return r50557;
}

double f(double x, double eps) {
        double r50558 = eps;
        double r50559 = -0.0002414674700011765;
        bool r50560 = r50558 <= r50559;
        double r50561 = 1.2384991687240798e-05;
        bool r50562 = r50558 <= r50561;
        double r50563 = !r50562;
        bool r50564 = r50560 || r50563;
        double r50565 = x;
        double r50566 = cos(r50565);
        double r50567 = cos(r50558);
        double r50568 = r50566 * r50567;
        double r50569 = sin(r50565);
        double r50570 = sin(r50558);
        double r50571 = r50569 * r50570;
        double r50572 = r50568 - r50571;
        double r50573 = r50572 - r50566;
        double r50574 = -2.0;
        double r50575 = 0.5;
        double r50576 = r50558 * r50575;
        double r50577 = sin(r50576);
        double r50578 = r50574 * r50577;
        double r50579 = r50565 + r50558;
        double r50580 = r50579 + r50565;
        double r50581 = 2.0;
        double r50582 = r50580 / r50581;
        double r50583 = sin(r50582);
        double r50584 = r50578 * r50583;
        double r50585 = r50564 ? r50573 : r50584;
        return r50585;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if eps < -0.0002414674700011765 or 1.2384991687240798e-05 < eps

    1. Initial program 30.5

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

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

    if -0.0002414674700011765 < eps < 1.2384991687240798e-05

    1. Initial program 48.9

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

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

      \[\leadsto -2 \cdot \color{blue}{\left(\sin \left(\varepsilon \cdot \frac{1}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)}\]
    5. Using strategy rm
    6. Applied associate-*r*0.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -2.41467470001176498 \cdot 10^{-4} \lor \neg \left(\varepsilon \le 1.2384991687240798 \cdot 10^{-5}\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;\left(-2 \cdot \sin \left(\varepsilon \cdot \frac{1}{2}\right)\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020047 
(FPCore (x eps)
  :name "2cos (problem 3.3.5)"
  :precision binary64
  (- (cos (+ x eps)) (cos x)))