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

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

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

\end{array}
double f(double x, double eps) {
        double r1352268 = x;
        double r1352269 = eps;
        double r1352270 = r1352268 + r1352269;
        double r1352271 = cos(r1352270);
        double r1352272 = cos(r1352268);
        double r1352273 = r1352271 - r1352272;
        return r1352273;
}

double f(double x, double eps) {
        double r1352274 = eps;
        double r1352275 = -0.005924238612320757;
        bool r1352276 = r1352274 <= r1352275;
        double r1352277 = x;
        double r1352278 = cos(r1352277);
        double r1352279 = cos(r1352274);
        double r1352280 = r1352278 * r1352279;
        double r1352281 = sin(r1352274);
        double r1352282 = sin(r1352277);
        double r1352283 = fma(r1352281, r1352282, r1352278);
        double r1352284 = r1352280 - r1352283;
        double r1352285 = 8.193560063624595e-05;
        bool r1352286 = r1352274 <= r1352285;
        double r1352287 = -2.0;
        double r1352288 = 2.0;
        double r1352289 = r1352274 / r1352288;
        double r1352290 = sin(r1352289);
        double r1352291 = r1352287 * r1352290;
        double r1352292 = fma(r1352288, r1352277, r1352274);
        double r1352293 = r1352292 / r1352288;
        double r1352294 = sin(r1352293);
        double r1352295 = log1p(r1352294);
        double r1352296 = expm1(r1352295);
        double r1352297 = r1352291 * r1352296;
        double r1352298 = r1352281 * r1352282;
        double r1352299 = r1352280 - r1352298;
        double r1352300 = r1352299 - r1352278;
        double r1352301 = r1352286 ? r1352297 : r1352300;
        double r1352302 = r1352276 ? r1352284 : r1352301;
        return r1352302;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -0.005924238612320757

    1. Initial program 29.1

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

    if -0.005924238612320757 < eps < 8.193560063624595e-05

    1. Initial program 48.7

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

      \[\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(\frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)}\]
    5. Using strategy rm
    6. Applied associate-*r*0.5

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

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

    if 8.193560063624595e-05 < eps

    1. Initial program 30.9

      \[\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\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.7

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

Reproduce

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