Average Error: 39.4 → 15.7
Time: 7.4s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -4.517751507358619699596019186183573409913 \cdot 10^{-14}:\\ \;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right) \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) + 0\right) + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}\\ \mathbf{elif}\;\varepsilon \le 3.472422074003834644235946382123669806674 \cdot 10^{-7}:\\ \;\;\;\;\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \mathsf{expm1}\left(\mathsf{log1p}\left(\sin x \cdot \sin \varepsilon\right)\right)\right) - \cos x\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.517751507358619699596019186183573409913 \cdot 10^{-14}:\\
\;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right) \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) + 0\right) + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}\\

\mathbf{elif}\;\varepsilon \le 3.472422074003834644235946382123669806674 \cdot 10^{-7}:\\
\;\;\;\;\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\\

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

\end{array}
double f(double x, double eps) {
        double r68429 = x;
        double r68430 = eps;
        double r68431 = r68429 + r68430;
        double r68432 = cos(r68431);
        double r68433 = cos(r68429);
        double r68434 = r68432 - r68433;
        return r68434;
}

double f(double x, double eps) {
        double r68435 = eps;
        double r68436 = -4.51775150735862e-14;
        bool r68437 = r68435 <= r68436;
        double r68438 = x;
        double r68439 = cos(r68438);
        double r68440 = cos(r68435);
        double r68441 = r68439 * r68440;
        double r68442 = 3.0;
        double r68443 = pow(r68441, r68442);
        double r68444 = sin(r68438);
        double r68445 = sin(r68435);
        double r68446 = fma(r68444, r68445, r68439);
        double r68447 = pow(r68446, r68442);
        double r68448 = r68443 - r68447;
        double r68449 = fma(r68439, r68440, r68446);
        double r68450 = r68446 * r68449;
        double r68451 = 0.0;
        double r68452 = r68450 + r68451;
        double r68453 = r68441 * r68441;
        double r68454 = r68452 + r68453;
        double r68455 = r68448 / r68454;
        double r68456 = 3.4724220740038346e-07;
        bool r68457 = r68435 <= r68456;
        double r68458 = 0.16666666666666666;
        double r68459 = pow(r68438, r68442);
        double r68460 = r68458 * r68459;
        double r68461 = r68460 - r68438;
        double r68462 = 0.5;
        double r68463 = r68435 * r68462;
        double r68464 = r68461 - r68463;
        double r68465 = r68435 * r68464;
        double r68466 = r68444 * r68445;
        double r68467 = log1p(r68466);
        double r68468 = expm1(r68467);
        double r68469 = r68441 - r68468;
        double r68470 = r68469 - r68439;
        double r68471 = r68457 ? r68465 : r68470;
        double r68472 = r68437 ? r68455 : r68471;
        return r68472;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -4.51775150735862e-14

    1. Initial program 32.1

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

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

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

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

      \[\leadsto \cos x \cdot \cos \varepsilon + \color{blue}{\left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\]
    8. Using strategy rm
    9. Applied flip3-+2.1

      \[\leadsto \color{blue}{\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} + {\left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}{\left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right) + \left(\left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) \cdot \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) - \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)}}\]
    10. Simplified2.1

      \[\leadsto \frac{\color{blue}{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}}{\left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right) + \left(\left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) \cdot \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) - \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(-\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)}\]
    11. Simplified2.1

      \[\leadsto \frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}{\color{blue}{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right) \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) + 0\right) + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}}\]

    if -4.51775150735862e-14 < eps < 3.4724220740038346e-07

    1. Initial program 49.0

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Taylor expanded around 0 31.3

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

      \[\leadsto \color{blue}{\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)}\]

    if 3.4724220740038346e-07 < eps

    1. Initial program 29.5

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

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

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin x \cdot \sin \varepsilon\right)\right)}\right) - \cos x\]
  3. Recombined 3 regimes into one program.
  4. Final simplification15.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -4.517751507358619699596019186183573409913 \cdot 10^{-14}:\\ \;\;\;\;\frac{{\left(\cos x \cdot \cos \varepsilon\right)}^{3} - {\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right) \cdot \mathsf{fma}\left(\cos x, \cos \varepsilon, \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) + 0\right) + \left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right)}\\ \mathbf{elif}\;\varepsilon \le 3.472422074003834644235946382123669806674 \cdot 10^{-7}:\\ \;\;\;\;\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \mathsf{expm1}\left(\mathsf{log1p}\left(\sin x \cdot \sin \varepsilon\right)\right)\right) - \cos x\\ \end{array}\]

Reproduce

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