Average Error: 39.7 → 0.7
Time: 26.0s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -3.2341653758080624 \cdot 10^{-05}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 0.00014617860674771797:\\ \;\;\;\;\sin \left(\frac{\varepsilon}{2}\right) \cdot \left(-2 \cdot (e^{\log_* (1 + \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right))} - 1)^*\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.2341653758080624 \cdot 10^{-05}:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

\mathbf{elif}\;\varepsilon \le 0.00014617860674771797:\\
\;\;\;\;\sin \left(\frac{\varepsilon}{2}\right) \cdot \left(-2 \cdot (e^{\log_* (1 + \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right))} - 1)^*\right)\\

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

\end{array}
double f(double x, double eps) {
        double r1183405 = x;
        double r1183406 = eps;
        double r1183407 = r1183405 + r1183406;
        double r1183408 = cos(r1183407);
        double r1183409 = cos(r1183405);
        double r1183410 = r1183408 - r1183409;
        return r1183410;
}

double f(double x, double eps) {
        double r1183411 = eps;
        double r1183412 = -3.2341653758080624e-05;
        bool r1183413 = r1183411 <= r1183412;
        double r1183414 = x;
        double r1183415 = cos(r1183414);
        double r1183416 = cos(r1183411);
        double r1183417 = r1183415 * r1183416;
        double r1183418 = sin(r1183414);
        double r1183419 = sin(r1183411);
        double r1183420 = r1183418 * r1183419;
        double r1183421 = r1183417 - r1183420;
        double r1183422 = r1183421 - r1183415;
        double r1183423 = 0.00014617860674771797;
        bool r1183424 = r1183411 <= r1183423;
        double r1183425 = 2.0;
        double r1183426 = r1183411 / r1183425;
        double r1183427 = sin(r1183426);
        double r1183428 = -2.0;
        double r1183429 = r1183414 + r1183411;
        double r1183430 = r1183429 + r1183414;
        double r1183431 = r1183430 / r1183425;
        double r1183432 = sin(r1183431);
        double r1183433 = log1p(r1183432);
        double r1183434 = expm1(r1183433);
        double r1183435 = r1183428 * r1183434;
        double r1183436 = r1183427 * r1183435;
        double r1183437 = r1183424 ? r1183436 : r1183422;
        double r1183438 = r1183413 ? r1183422 : r1183437;
        return r1183438;
}

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 < -3.2341653758080624e-05 or 0.00014617860674771797 < eps

    1. Initial program 30.3

      \[\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 -3.2341653758080624e-05 < eps < 0.00014617860674771797

    1. Initial program 49.7

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

      \[\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(\frac{x + \left(\varepsilon + x\right)}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)}\]
    5. Using strategy rm
    6. Applied associate-*r*0.5

      \[\leadsto \color{blue}{\left(-2 \cdot \sin \left(\frac{x + \left(\varepsilon + x\right)}{2}\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)}\]
    7. Using strategy rm
    8. Applied expm1-log1p-u0.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -3.2341653758080624 \cdot 10^{-05}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 0.00014617860674771797:\\ \;\;\;\;\sin \left(\frac{\varepsilon}{2}\right) \cdot \left(-2 \cdot (e^{\log_* (1 + \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right))} - 1)^*\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \end{array}\]

Reproduce

herbie shell --seed 2019119 +o rules:numerics
(FPCore (x eps)
  :name "2cos (problem 3.3.5)"
  (- (cos (+ x eps)) (cos x)))