Average Error: 39.5 → 0.9
Time: 14.6s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -8.608808965388138481969471094146229006583 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 260530.52023522579111158847808837890625\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin \varepsilon \cdot \sin x\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.608808965388138481969471094146229006583 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 260530.52023522579111158847808837890625\right):\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin \varepsilon \cdot \sin x\right) - \cos x\\

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

\end{array}
double f(double x, double eps) {
        double r50271 = x;
        double r50272 = eps;
        double r50273 = r50271 + r50272;
        double r50274 = cos(r50273);
        double r50275 = cos(r50271);
        double r50276 = r50274 - r50275;
        return r50276;
}

double f(double x, double eps) {
        double r50277 = eps;
        double r50278 = -8.608808965388138e-05;
        bool r50279 = r50277 <= r50278;
        double r50280 = 260530.5202352258;
        bool r50281 = r50277 <= r50280;
        double r50282 = !r50281;
        bool r50283 = r50279 || r50282;
        double r50284 = x;
        double r50285 = cos(r50284);
        double r50286 = cos(r50277);
        double r50287 = r50285 * r50286;
        double r50288 = sin(r50277);
        double r50289 = sin(r50284);
        double r50290 = r50288 * r50289;
        double r50291 = r50287 - r50290;
        double r50292 = r50291 - r50285;
        double r50293 = -2.0;
        double r50294 = 2.0;
        double r50295 = r50277 / r50294;
        double r50296 = sin(r50295);
        double r50297 = r50293 * r50296;
        double r50298 = fma(r50294, r50284, r50277);
        double r50299 = r50298 / r50294;
        double r50300 = sin(r50299);
        double r50301 = r50297 * r50300;
        double r50302 = r50283 ? r50292 : r50301;
        return r50302;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -8.608808965388138e-05 or 260530.5202352258 < eps

    1. Initial program 30.1

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Simplified30.1

      \[\leadsto \color{blue}{\cos \left(\varepsilon + x\right) - \cos x}\]
    3. Using strategy rm
    4. Applied cos-sum0.8

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

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

    if -8.608808965388138e-05 < eps < 260530.5202352258

    1. Initial program 49.1

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Simplified49.1

      \[\leadsto \color{blue}{\cos \left(\varepsilon + x\right) - \cos x}\]
    3. Using strategy rm
    4. Applied diff-cos37.6

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

      \[\leadsto -2 \cdot \color{blue}{\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)}\]
    6. Using strategy rm
    7. Applied associate-*r*0.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -8.608808965388138481969471094146229006583 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 260530.52023522579111158847808837890625\right):\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin \varepsilon \cdot \sin x\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\\ \end{array}\]

Reproduce

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