Average Error: 39.8 → 1.1
Time: 19.7s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -2578326.2911242372:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 6.177621166523711 \cdot 10^{-05}:\\ \;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \left(-2 \cdot \sin \left(\frac{\mathsf{fma}\left(x, 2, \varepsilon\right)}{2}\right)\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2578326.2911242372:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

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

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

\end{array}
double f(double x, double eps) {
        double r1154436 = x;
        double r1154437 = eps;
        double r1154438 = r1154436 + r1154437;
        double r1154439 = cos(r1154438);
        double r1154440 = cos(r1154436);
        double r1154441 = r1154439 - r1154440;
        return r1154441;
}

double f(double x, double eps) {
        double r1154442 = eps;
        double r1154443 = -2578326.2911242372;
        bool r1154444 = r1154442 <= r1154443;
        double r1154445 = x;
        double r1154446 = cos(r1154445);
        double r1154447 = cos(r1154442);
        double r1154448 = r1154446 * r1154447;
        double r1154449 = sin(r1154445);
        double r1154450 = sin(r1154442);
        double r1154451 = r1154449 * r1154450;
        double r1154452 = r1154448 - r1154451;
        double r1154453 = r1154452 - r1154446;
        double r1154454 = 6.177621166523711e-05;
        bool r1154455 = r1154442 <= r1154454;
        double r1154456 = 2.0;
        double r1154457 = r1154442 / r1154456;
        double r1154458 = sin(r1154457);
        double r1154459 = -2.0;
        double r1154460 = fma(r1154445, r1154456, r1154442);
        double r1154461 = r1154460 / r1154456;
        double r1154462 = sin(r1154461);
        double r1154463 = r1154459 * r1154462;
        double r1154464 = r1154458 * r1154463;
        double r1154465 = log1p(r1154464);
        double r1154466 = expm1(r1154465);
        double r1154467 = fma(r1154450, r1154449, r1154446);
        double r1154468 = r1154448 - r1154467;
        double r1154469 = r1154455 ? r1154466 : r1154468;
        double r1154470 = r1154444 ? r1154453 : r1154469;
        return r1154470;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -2578326.2911242372

    1. Initial program 31.2

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

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

    if -2578326.2911242372 < eps < 6.177621166523711e-05

    1. Initial program 48.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. Simplified1.2

      \[\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)}\]
    5. Using strategy rm
    6. Applied associate-*r*1.2

      \[\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)}\]
    7. Using strategy rm
    8. Applied log1p-expm1-u1.3

      \[\leadsto \left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)}\]
    9. Using strategy rm
    10. Applied expm1-log1p-u1.5

      \[\leadsto \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)\right)\right)}\]
    11. Simplified1.4

      \[\leadsto \mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(\left(-2 \cdot \sin \left(\frac{\mathsf{fma}\left(x, 2, \varepsilon\right)}{2}\right)\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)}\right)\]

    if 6.177621166523711e-05 < eps

    1. Initial program 30.0

      \[\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\]
    4. Applied associate--l-1.0

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

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

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

Reproduce

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