Average Error: 39.9 → 15.7
Time: 19.2s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -3.735186528216483498553417835763568177754 \cdot 10^{-6}:\\ \;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)\\ \mathbf{elif}\;\varepsilon \le 2.307757405863471073912161291366573756534 \cdot 10^{-7}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{24}, \left(\varepsilon \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \varepsilon\right) \cdot \frac{-1}{2}\right) - x \cdot \varepsilon\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.735186528216483498553417835763568177754 \cdot 10^{-6}:\\
\;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)\\

\mathbf{elif}\;\varepsilon \le 2.307757405863471073912161291366573756534 \cdot 10^{-7}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{24}, \left(\varepsilon \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \varepsilon\right) \cdot \frac{-1}{2}\right) - x \cdot \varepsilon\\

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

\end{array}
double f(double x, double eps) {
        double r2584443 = x;
        double r2584444 = eps;
        double r2584445 = r2584443 + r2584444;
        double r2584446 = cos(r2584445);
        double r2584447 = cos(r2584443);
        double r2584448 = r2584446 - r2584447;
        return r2584448;
}

double f(double x, double eps) {
        double r2584449 = eps;
        double r2584450 = -3.7351865282164835e-06;
        bool r2584451 = r2584449 <= r2584450;
        double r2584452 = x;
        double r2584453 = cos(r2584452);
        double r2584454 = cos(r2584449);
        double r2584455 = sin(r2584449);
        double r2584456 = sin(r2584452);
        double r2584457 = fma(r2584455, r2584456, r2584453);
        double r2584458 = -r2584457;
        double r2584459 = fma(r2584453, r2584454, r2584458);
        double r2584460 = 2.307757405863471e-07;
        bool r2584461 = r2584449 <= r2584460;
        double r2584462 = 0.041666666666666664;
        double r2584463 = r2584449 * r2584449;
        double r2584464 = r2584463 * r2584463;
        double r2584465 = -0.5;
        double r2584466 = r2584463 * r2584465;
        double r2584467 = fma(r2584462, r2584464, r2584466);
        double r2584468 = r2584452 * r2584449;
        double r2584469 = r2584467 - r2584468;
        double r2584470 = r2584461 ? r2584469 : r2584459;
        double r2584471 = r2584451 ? r2584459 : r2584470;
        return r2584471;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -3.7351865282164835e-06 or 2.307757405863471e-07 < eps

    1. Initial program 31.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)}\]
    6. Using strategy rm
    7. Applied fma-neg1.0

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

    if -3.7351865282164835e-06 < eps < 2.307757405863471e-07

    1. Initial program 49.4

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Applied associate--l-48.8

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

      \[\leadsto \cos x \cdot \cos \varepsilon - \color{blue}{\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)}\]
    6. Using strategy rm
    7. Applied fma-neg48.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)}\]
    8. Using strategy rm
    9. Applied add-log-exp48.8

      \[\leadsto \color{blue}{\log \left(e^{\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)}\right)}\]
    10. Simplified48.8

      \[\leadsto \log \color{blue}{\left(e^{\cos \varepsilon \cdot \cos x - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)}\]
    11. Taylor expanded around 0 31.2

      \[\leadsto \color{blue}{\frac{1}{24} \cdot {\varepsilon}^{4} - \left(x \cdot \varepsilon + \frac{1}{2} \cdot {\varepsilon}^{2}\right)}\]
    12. Simplified31.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -3.735186528216483498553417835763568177754 \cdot 10^{-6}:\\ \;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)\\ \mathbf{elif}\;\varepsilon \le 2.307757405863471073912161291366573756534 \cdot 10^{-7}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{24}, \left(\varepsilon \cdot \varepsilon\right) \cdot \left(\varepsilon \cdot \varepsilon\right), \left(\varepsilon \cdot \varepsilon\right) \cdot \frac{-1}{2}\right) - x \cdot \varepsilon\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\cos x, \cos \varepsilon, -\mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\right)\\ \end{array}\]

Reproduce

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