Average Error: 39.9 → 16.4
Time: 7.2s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -4.3349751054848348 \cdot 10^{-10}:\\ \;\;\;\;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 4.38346934273984842 \cdot 10^{-11}:\\ \;\;\;\;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{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right) \cdot \left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right)}{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right)} - \cos x\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.3349751054848348 \cdot 10^{-10}:\\
\;\;\;\;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 4.38346934273984842 \cdot 10^{-11}:\\
\;\;\;\;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{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right) \cdot \left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right)}{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right)} - \cos x\\

\end{array}
double f(double x, double eps) {
        double r60979 = x;
        double r60980 = eps;
        double r60981 = r60979 + r60980;
        double r60982 = cos(r60981);
        double r60983 = cos(r60979);
        double r60984 = r60982 - r60983;
        return r60984;
}

double f(double x, double eps) {
        double r60985 = eps;
        double r60986 = -4.334975105484835e-10;
        bool r60987 = r60985 <= r60986;
        double r60988 = 1.0;
        double r60989 = cos(r60985);
        double r60990 = x;
        double r60991 = cos(r60990);
        double r60992 = sin(r60990);
        double r60993 = sin(r60985);
        double r60994 = fma(r60992, r60993, r60991);
        double r60995 = exp(r60994);
        double r60996 = log(r60995);
        double r60997 = -r60996;
        double r60998 = fma(r60989, r60991, r60997);
        double r60999 = r60988 * r60998;
        double r61000 = 4.3834693427398484e-11;
        bool r61001 = r60985 <= r61000;
        double r61002 = 3.0;
        double r61003 = pow(r60985, r61002);
        double r61004 = 0.041666666666666664;
        double r61005 = r61003 * r61004;
        double r61006 = 0.5;
        double r61007 = fma(r61006, r60985, r60990);
        double r61008 = r61005 - r61007;
        double r61009 = r60985 * r61008;
        double r61010 = r60988 * r61009;
        double r61011 = r60992 * r60993;
        double r61012 = fma(r60991, r60989, r61011);
        double r61013 = r60989 * r60991;
        double r61014 = r61013 - r61011;
        double r61015 = r61012 * r61014;
        double r61016 = r61015 / r61012;
        double r61017 = r61016 - r60991;
        double r61018 = r61001 ? r61010 : r61017;
        double r61019 = r60987 ? r60999 : r61018;
        return r61019;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -4.334975105484835e-10

    1. Initial program 30.0

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

      \[\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-identity1.3

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

      \[\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--1.3

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

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

      \[\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 -4.334975105484835e-10 < eps < 4.3834693427398484e-11

    1. Initial program 49.5

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

      \[\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.3

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

      \[\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.3

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

      \[\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 31.2

      \[\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. Simplified31.2

      \[\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 4.3834693427398484e-11 < eps

    1. Initial program 30.8

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

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

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin x \cdot \sin \varepsilon\right)\right)}\right) - \cos x\]
    6. Using strategy rm
    7. Applied flip--1.8

      \[\leadsto \color{blue}{\frac{\left(\cos x \cdot \cos \varepsilon\right) \cdot \left(\cos x \cdot \cos \varepsilon\right) - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin x \cdot \sin \varepsilon\right)\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin x \cdot \sin \varepsilon\right)\right)}{\cos x \cdot \cos \varepsilon + \mathsf{log1p}\left(\mathsf{expm1}\left(\sin x \cdot \sin \varepsilon\right)\right)}} - \cos x\]
    8. Simplified1.8

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right) \cdot \left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right)}}{\cos x \cdot \cos \varepsilon + \mathsf{log1p}\left(\mathsf{expm1}\left(\sin x \cdot \sin \varepsilon\right)\right)} - \cos x\]
    9. Simplified1.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -4.3349751054848348 \cdot 10^{-10}:\\ \;\;\;\;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 4.38346934273984842 \cdot 10^{-11}:\\ \;\;\;\;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{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right) \cdot \left(\cos \varepsilon \cdot \cos x - \sin x \cdot \sin \varepsilon\right)}{\mathsf{fma}\left(\cos x, \cos \varepsilon, \sin x \cdot \sin \varepsilon\right)} - \cos x\\ \end{array}\]

Reproduce

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