Average Error: 40.1 → 15.9
Time: 6.8s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.1888021786142176 \cdot 10^{-8}:\\ \;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\ \mathbf{elif}\;\varepsilon \le 4.9162524699735606 \cdot 10^{-5}:\\ \;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.1888021786142176 \cdot 10^{-8}:\\
\;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\

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

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

\end{array}
double f(double x, double eps) {
        double r29334 = x;
        double r29335 = eps;
        double r29336 = r29334 + r29335;
        double r29337 = cos(r29336);
        double r29338 = cos(r29334);
        double r29339 = r29337 - r29338;
        return r29339;
}

double f(double x, double eps) {
        double r29340 = eps;
        double r29341 = -1.1888021786142176e-08;
        bool r29342 = r29340 <= r29341;
        double r29343 = cos(r29340);
        double r29344 = x;
        double r29345 = cos(r29344);
        double r29346 = sin(r29344);
        double r29347 = sin(r29340);
        double r29348 = fma(r29346, r29347, r29345);
        double r29349 = -r29348;
        double r29350 = fma(r29343, r29345, r29349);
        double r29351 = exp(r29350);
        double r29352 = log(r29351);
        double r29353 = 4.9162524699735606e-05;
        bool r29354 = r29340 <= r29353;
        double r29355 = 3.0;
        double r29356 = pow(r29340, r29355);
        double r29357 = 0.041666666666666664;
        double r29358 = r29356 * r29357;
        double r29359 = 0.5;
        double r29360 = fma(r29359, r29340, r29344);
        double r29361 = r29358 - r29360;
        double r29362 = r29340 * r29361;
        double r29363 = r29345 * r29343;
        double r29364 = expm1(r29363);
        double r29365 = log1p(r29364);
        double r29366 = r29365 - r29348;
        double r29367 = r29354 ? r29362 : r29366;
        double r29368 = r29342 ? r29352 : r29367;
        return r29368;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -1.1888021786142176e-08

    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 add-log-exp1.4

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{\log \left(e^{\cos x}\right)}\]
    6. Applied add-log-exp1.4

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\log \left(e^{\sin x \cdot \sin \varepsilon}\right)}\right) - \log \left(e^{\cos x}\right)\]
    7. Applied add-log-exp1.6

      \[\leadsto \left(\color{blue}{\log \left(e^{\cos x \cdot \cos \varepsilon}\right)} - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) - \log \left(e^{\cos x}\right)\]
    8. Applied diff-log1.6

      \[\leadsto \color{blue}{\log \left(\frac{e^{\cos x \cdot \cos \varepsilon}}{e^{\sin x \cdot \sin \varepsilon}}\right)} - \log \left(e^{\cos x}\right)\]
    9. Applied diff-log1.7

      \[\leadsto \color{blue}{\log \left(\frac{\frac{e^{\cos x \cdot \cos \varepsilon}}{e^{\sin x \cdot \sin \varepsilon}}}{e^{\cos x}}\right)}\]
    10. Simplified1.4

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

    if -1.1888021786142176e-08 < eps < 4.9162524699735606e-05

    1. Initial program 49.1

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

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

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

      \[\leadsto \cos x \cdot \cos \varepsilon - \color{blue}{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\]
    6. Taylor expanded around inf 48.6

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

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

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

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

    if 4.9162524699735606e-05 < eps

    1. Initial program 32.4

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -1.1888021786142176 \cdot 10^{-8}:\\ \;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\ \mathbf{elif}\;\varepsilon \le 4.9162524699735606 \cdot 10^{-5}:\\ \;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\ \end{array}\]

Reproduce

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