Average Error: 39.1 → 0.7
Time: 23.4s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -2.68449879533306243542534197388249594951 \cdot 10^{-4} \lor \neg \left(\varepsilon \le 3.028675491606891100851602083299241030545 \cdot 10^{-6}\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;-2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.68449879533306243542534197388249594951 \cdot 10^{-4} \lor \neg \left(\varepsilon \le 3.028675491606891100851602083299241030545 \cdot 10^{-6}\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

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

\end{array}
double f(double x, double eps) {
        double r33992 = x;
        double r33993 = eps;
        double r33994 = r33992 + r33993;
        double r33995 = cos(r33994);
        double r33996 = cos(r33992);
        double r33997 = r33995 - r33996;
        return r33997;
}

double f(double x, double eps) {
        double r33998 = eps;
        double r33999 = -0.00026844987953330624;
        bool r34000 = r33998 <= r33999;
        double r34001 = 3.028675491606891e-06;
        bool r34002 = r33998 <= r34001;
        double r34003 = !r34002;
        bool r34004 = r34000 || r34003;
        double r34005 = x;
        double r34006 = cos(r34005);
        double r34007 = cos(r33998);
        double r34008 = r34006 * r34007;
        double r34009 = sin(r34005);
        double r34010 = sin(r33998);
        double r34011 = r34009 * r34010;
        double r34012 = r34008 - r34011;
        double r34013 = r34012 - r34006;
        double r34014 = -2.0;
        double r34015 = 2.0;
        double r34016 = r33998 / r34015;
        double r34017 = sin(r34016);
        double r34018 = r34005 + r33998;
        double r34019 = r34018 + r34005;
        double r34020 = r34019 / r34015;
        double r34021 = sin(r34020);
        double r34022 = r34017 * r34021;
        double r34023 = r34014 * r34022;
        double r34024 = r34004 ? r34013 : r34023;
        return r34024;
}

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.00026844987953330624 or 3.028675491606891e-06 < eps

    1. Initial program 29.4

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

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

    if -0.00026844987953330624 < eps < 3.028675491606891e-06

    1. Initial program 49.2

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Using strategy rm
    3. Applied diff-cos38.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{\varepsilon}{2}\right) \cdot \sin \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.7

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

Reproduce

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