Average Error: 39.4 → 0.7
Time: 23.8s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -0.0008099166487036783:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 1.4877491964720032 \cdot 10^{-05}:\\ \;\;\;\;\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)\right) \cdot -2\\ \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 -0.0008099166487036783:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

\mathbf{elif}\;\varepsilon \le 1.4877491964720032 \cdot 10^{-05}:\\
\;\;\;\;\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)\right) \cdot -2\\

\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 r741459 = x;
        double r741460 = eps;
        double r741461 = r741459 + r741460;
        double r741462 = cos(r741461);
        double r741463 = cos(r741459);
        double r741464 = r741462 - r741463;
        return r741464;
}

double f(double x, double eps) {
        double r741465 = eps;
        double r741466 = -0.0008099166487036783;
        bool r741467 = r741465 <= r741466;
        double r741468 = x;
        double r741469 = cos(r741468);
        double r741470 = cos(r741465);
        double r741471 = r741469 * r741470;
        double r741472 = sin(r741468);
        double r741473 = sin(r741465);
        double r741474 = r741472 * r741473;
        double r741475 = r741471 - r741474;
        double r741476 = r741475 - r741469;
        double r741477 = 1.4877491964720032e-05;
        bool r741478 = r741465 <= r741477;
        double r741479 = 0.5;
        double r741480 = r741479 * r741465;
        double r741481 = sin(r741480);
        double r741482 = 2.0;
        double r741483 = fma(r741482, r741468, r741465);
        double r741484 = r741483 / r741482;
        double r741485 = sin(r741484);
        double r741486 = log1p(r741485);
        double r741487 = expm1(r741486);
        double r741488 = r741481 * r741487;
        double r741489 = -2.0;
        double r741490 = r741488 * r741489;
        double r741491 = r741478 ? r741490 : r741476;
        double r741492 = r741467 ? r741476 : r741491;
        return r741492;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -0.0008099166487036783 or 1.4877491964720032e-05 < eps

    1. Initial program 29.2

      \[\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.0008099166487036783 < eps < 1.4877491964720032e-05

    1. Initial program 49.5

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

      \[\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{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)}\]
    5. Using strategy rm
    6. Applied expm1-log1p-u0.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -0.0008099166487036783:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 1.4877491964720032 \cdot 10^{-05}:\\ \;\;\;\;\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)\right) \cdot -2\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \end{array}\]

Reproduce

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