Average Error: 39.7 → 15.9
Time: 7.6s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -5.11955164844569822 \cdot 10^{-31} \lor \neg \left(\varepsilon \le 2.81129265655088791 \cdot 10^{-6}\right):\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -5.11955164844569822 \cdot 10^{-31} \lor \neg \left(\varepsilon \le 2.81129265655088791 \cdot 10^{-6}\right):\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\\

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

\end{array}
double f(double x, double eps) {
        double r102325 = x;
        double r102326 = eps;
        double r102327 = r102325 + r102326;
        double r102328 = cos(r102327);
        double r102329 = cos(r102325);
        double r102330 = r102328 - r102329;
        return r102330;
}

double f(double x, double eps) {
        double r102331 = eps;
        double r102332 = -5.119551648445698e-31;
        bool r102333 = r102331 <= r102332;
        double r102334 = 2.811292656550888e-06;
        bool r102335 = r102331 <= r102334;
        double r102336 = !r102335;
        bool r102337 = r102333 || r102336;
        double r102338 = 1.0;
        double r102339 = cos(r102331);
        double r102340 = x;
        double r102341 = cos(r102340);
        double r102342 = sin(r102340);
        double r102343 = sin(r102331);
        double r102344 = fma(r102342, r102343, r102341);
        double r102345 = -r102344;
        double r102346 = fma(r102339, r102341, r102345);
        double r102347 = r102338 * r102346;
        double r102348 = 3.0;
        double r102349 = pow(r102331, r102348);
        double r102350 = 0.041666666666666664;
        double r102351 = r102349 * r102350;
        double r102352 = 0.5;
        double r102353 = fma(r102352, r102331, r102340);
        double r102354 = r102351 - r102353;
        double r102355 = r102331 * r102354;
        double r102356 = r102338 * r102355;
        double r102357 = r102337 ? r102347 : r102356;
        return r102357;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -5.119551648445698e-31 or 2.811292656550888e-06 < eps

    1. Initial program 31.4

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity2.9

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{1 \cdot \cos x}\]
    6. Applied *-un-lft-identity2.9

      \[\leadsto \color{blue}{1 \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - 1 \cdot \cos x\]
    7. Applied distribute-lft-out--2.9

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

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

    if -5.119551648445698e-31 < eps < 2.811292656550888e-06

    1. Initial program 49.2

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity49.0

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{1 \cdot \cos x}\]
    6. Applied *-un-lft-identity49.0

      \[\leadsto \color{blue}{1 \cdot \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - 1 \cdot \cos x\]
    7. Applied distribute-lft-out--49.0

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

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    9. Taylor expanded around 0 30.6

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -5.11955164844569822 \cdot 10^{-31} \lor \neg \left(\varepsilon \le 2.81129265655088791 \cdot 10^{-6}\right):\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \end{array}\]

Reproduce

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