Average Error: 39.9 → 0.7
Time: 24.0s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -4.028105222915818 \cdot 10^{-06}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 0.11407284983207572:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right) \cdot -2\\ \mathbf{else}:\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.028105222915818 \cdot 10^{-06}:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

\mathbf{elif}\;\varepsilon \le 0.11407284983207572:\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right) \cdot -2\\

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

\end{array}
double f(double x, double eps) {
        double r1642349 = x;
        double r1642350 = eps;
        double r1642351 = r1642349 + r1642350;
        double r1642352 = cos(r1642351);
        double r1642353 = cos(r1642349);
        double r1642354 = r1642352 - r1642353;
        return r1642354;
}

double f(double x, double eps) {
        double r1642355 = eps;
        double r1642356 = -4.028105222915818e-06;
        bool r1642357 = r1642355 <= r1642356;
        double r1642358 = x;
        double r1642359 = cos(r1642358);
        double r1642360 = cos(r1642355);
        double r1642361 = r1642359 * r1642360;
        double r1642362 = sin(r1642358);
        double r1642363 = sin(r1642355);
        double r1642364 = r1642362 * r1642363;
        double r1642365 = r1642361 - r1642364;
        double r1642366 = r1642365 - r1642359;
        double r1642367 = 0.11407284983207572;
        bool r1642368 = r1642355 <= r1642367;
        double r1642369 = 0.5;
        double r1642370 = r1642369 * r1642355;
        double r1642371 = sin(r1642370);
        double r1642372 = 2.0;
        double r1642373 = fma(r1642372, r1642358, r1642355);
        double r1642374 = r1642373 / r1642372;
        double r1642375 = sin(r1642374);
        double r1642376 = r1642371 * r1642375;
        double r1642377 = expm1(r1642376);
        double r1642378 = log1p(r1642377);
        double r1642379 = -2.0;
        double r1642380 = r1642378 * r1642379;
        double r1642381 = fma(r1642363, r1642362, r1642359);
        double r1642382 = r1642361 - r1642381;
        double r1642383 = r1642368 ? r1642380 : r1642382;
        double r1642384 = r1642357 ? r1642366 : r1642383;
        return r1642384;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -4.028105222915818e-06

    1. Initial program 30.5

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

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

    if -4.028105222915818e-06 < eps < 0.11407284983207572

    1. Initial program 49.3

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

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

      \[\leadsto -2 \cdot \color{blue}{\left(\sin \left(\varepsilon \cdot \frac{1}{2}\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)}\]
    5. Using strategy rm
    6. Applied log1p-expm1-u0.5

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

    if 0.11407284983207572 < eps

    1. Initial program 29.6

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -4.028105222915818 \cdot 10^{-06}:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 0.11407284983207572:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right) \cdot -2\\ \mathbf{else}:\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin \varepsilon, \sin x, \cos x\right)\\ \end{array}\]

Reproduce

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