Average Error: 39.7 → 15.9
Time: 6.5s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -5.11955164844569822 \cdot 10^{-31} \lor \neg \left(\varepsilon \le 2.81129265655088791 \cdot 10^{-6}\right):\\ \;\;\;\;\cos \varepsilon \cdot \cos x + \left(\left(-\sin x \cdot \sin \varepsilon\right) - \cos x\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{24} \cdot {\varepsilon}^{4} - \left(x \cdot \varepsilon + \frac{1}{2} \cdot {\varepsilon}^{2}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -5.11955164844569822 \cdot 10^{-31} \lor \neg \left(\varepsilon \le 2.81129265655088791 \cdot 10^{-6}\right):\\
\;\;\;\;\cos \varepsilon \cdot \cos x + \left(\left(-\sin x \cdot \sin \varepsilon\right) - \cos x\right)\\

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

\end{array}
double f(double x, double eps) {
        double r76466 = x;
        double r76467 = eps;
        double r76468 = r76466 + r76467;
        double r76469 = cos(r76468);
        double r76470 = cos(r76466);
        double r76471 = r76469 - r76470;
        return r76471;
}

double f(double x, double eps) {
        double r76472 = eps;
        double r76473 = -5.119551648445698e-31;
        bool r76474 = r76472 <= r76473;
        double r76475 = 2.811292656550888e-06;
        bool r76476 = r76472 <= r76475;
        double r76477 = !r76476;
        bool r76478 = r76474 || r76477;
        double r76479 = cos(r76472);
        double r76480 = x;
        double r76481 = cos(r76480);
        double r76482 = r76479 * r76481;
        double r76483 = sin(r76480);
        double r76484 = sin(r76472);
        double r76485 = r76483 * r76484;
        double r76486 = -r76485;
        double r76487 = r76486 - r76481;
        double r76488 = r76482 + r76487;
        double r76489 = 0.041666666666666664;
        double r76490 = 4.0;
        double r76491 = pow(r76472, r76490);
        double r76492 = r76489 * r76491;
        double r76493 = r76480 * r76472;
        double r76494 = 0.5;
        double r76495 = 2.0;
        double r76496 = pow(r76472, r76495);
        double r76497 = r76494 * r76496;
        double r76498 = r76493 + r76497;
        double r76499 = r76492 - r76498;
        double r76500 = r76478 ? r76488 : r76499;
        return r76500;
}

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 < -5.119551648445698e-31 or 2.811292656550888e-06 < eps

    1. Initial program 31.4

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied sub-neg2.9

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

      \[\leadsto \color{blue}{\cos x \cdot \cos \varepsilon + \left(\left(-\sin x \cdot \sin \varepsilon\right) - \cos x\right)}\]
    7. Using strategy rm
    8. Applied *-commutative2.9

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

    if -5.119551648445698e-31 < eps < 2.811292656550888e-06

    1. Initial program 49.2

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied sub-neg49.0

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

      \[\leadsto \color{blue}{\cos x \cdot \cos \varepsilon + \left(\left(-\sin x \cdot \sin \varepsilon\right) - \cos x\right)}\]
    7. Using strategy rm
    8. Applied *-commutative49.0

      \[\leadsto \color{blue}{\cos \varepsilon \cdot \cos x} + \left(\left(-\sin x \cdot \sin \varepsilon\right) - \cos x\right)\]
    9. Taylor expanded around 0 30.6

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

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

Reproduce

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