Average Error: 39.5 → 17.1
Time: 6.8s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -3.2377418339921979 \cdot 10^{-63}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\log \left(e^{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\right)\\ \mathbf{elif}\;\varepsilon \le 9.62382077211877741 \cdot 10^{-17}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{\mathsf{fma}\left(\sin x \cdot \sin \varepsilon, \mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right), \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)\right)} - \cos x\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -3.2377418339921979 \cdot 10^{-63}:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\log \left(e^{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\right)\\

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

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

\end{array}
double f(double x, double eps) {
        double r25392 = x;
        double r25393 = eps;
        double r25394 = r25392 + r25393;
        double r25395 = cos(r25394);
        double r25396 = cos(r25392);
        double r25397 = r25395 - r25396;
        return r25397;
}

double f(double x, double eps) {
        double r25398 = eps;
        double r25399 = -3.237741833992198e-63;
        bool r25400 = r25398 <= r25399;
        double r25401 = 1.0;
        double r25402 = cos(r25398);
        double r25403 = x;
        double r25404 = cos(r25403);
        double r25405 = sin(r25403);
        double r25406 = sin(r25398);
        double r25407 = fma(r25405, r25406, r25404);
        double r25408 = exp(r25407);
        double r25409 = log(r25408);
        double r25410 = -r25409;
        double r25411 = fma(r25402, r25404, r25410);
        double r25412 = r25401 * r25411;
        double r25413 = 9.623820772118777e-17;
        bool r25414 = r25398 <= r25413;
        double r25415 = 3.0;
        double r25416 = pow(r25398, r25415);
        double r25417 = 0.041666666666666664;
        double r25418 = r25416 * r25417;
        double r25419 = 0.5;
        double r25420 = fma(r25419, r25398, r25403);
        double r25421 = r25418 - r25420;
        double r25422 = r25398 * r25421;
        double r25423 = r25401 * r25422;
        double r25424 = r25404 * r25402;
        double r25425 = pow(r25424, r25415);
        double r25426 = r25405 * r25406;
        double r25427 = pow(r25426, r25415);
        double r25428 = r25425 - r25427;
        double r25429 = fma(r25404, r25402, r25426);
        double r25430 = r25424 * r25424;
        double r25431 = fma(r25426, r25429, r25430);
        double r25432 = r25428 / r25431;
        double r25433 = r25432 - r25404;
        double r25434 = r25414 ? r25423 : r25433;
        double r25435 = r25400 ? r25412 : r25434;
        return r25435;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -3.237741833992198e-63

    1. Initial program 34.6

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

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

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

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

      \[\leadsto \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \color{blue}{1 \cdot \cos x}\]
    9. Applied *-un-lft-identity10.0

      \[\leadsto \color{blue}{1 \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)} - 1 \cdot \cos x\]
    10. Applied distribute-lft-out--10.0

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

      \[\leadsto 1 \cdot \color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    12. Using strategy rm
    13. Applied add-log-exp10.0

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

    if -3.237741833992198e-63 < eps < 9.623820772118777e-17

    1. Initial program 47.7

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied fma-neg47.7

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

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

      \[\leadsto \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right) - \color{blue}{1 \cdot \cos x}\]
    9. Applied *-un-lft-identity47.7

      \[\leadsto \color{blue}{1 \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, -\sin \varepsilon \cdot \sin x\right)} - 1 \cdot \cos x\]
    10. Applied distribute-lft-out--47.7

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

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

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

      \[\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)}\]

    if 9.623820772118777e-17 < eps

    1. Initial program 31.6

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied flip3--2.7

      \[\leadsto \color{blue}{\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{\left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right) + \left(\left(\sin x \cdot \sin \varepsilon\right) \cdot \left(\sin x \cdot \sin \varepsilon\right) + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\sin x \cdot \sin \varepsilon\right)\right)}} - \cos x\]
    6. Simplified2.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -3.2377418339921979 \cdot 10^{-63}:\\ \;\;\;\;1 \cdot \mathsf{fma}\left(\cos \varepsilon, \cos x, -\log \left(e^{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\right)\\ \mathbf{elif}\;\varepsilon \le 9.62382077211877741 \cdot 10^{-17}:\\ \;\;\;\;1 \cdot \left(\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\sin x \cdot \sin \varepsilon\right)}^{3}}{\mathsf{fma}\left(\sin x \cdot \sin \varepsilon, \mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right), \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)\right)} - \cos x\\ \end{array}\]

Reproduce

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