Average Error: 39.6 → 16.0
Time: 7.8s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -7.61643354190788131 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 1.66244423770151382 \cdot 10^{-7}\right):\\ \;\;\;\;\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right) \cdot \left(\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)\right)}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)}\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.61643354190788131 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 1.66244423770151382 \cdot 10^{-7}\right):\\
\;\;\;\;\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \sin x \cdot \sin \varepsilon\right) - \cos x\\

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right) \cdot \left(\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)\right)}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)}\\

\end{array}
double f(double x, double eps) {
        double r73331 = x;
        double r73332 = eps;
        double r73333 = r73331 + r73332;
        double r73334 = cos(r73333);
        double r73335 = cos(r73331);
        double r73336 = r73334 - r73335;
        return r73336;
}

double f(double x, double eps) {
        double r73337 = eps;
        double r73338 = -7.616433541907881e-06;
        bool r73339 = r73337 <= r73338;
        double r73340 = 1.6624442377015138e-07;
        bool r73341 = r73337 <= r73340;
        double r73342 = !r73341;
        bool r73343 = r73339 || r73342;
        double r73344 = x;
        double r73345 = cos(r73344);
        double r73346 = cos(r73337);
        double r73347 = r73345 * r73346;
        double r73348 = expm1(r73347);
        double r73349 = log1p(r73348);
        double r73350 = sin(r73344);
        double r73351 = sin(r73337);
        double r73352 = r73350 * r73351;
        double r73353 = r73349 - r73352;
        double r73354 = r73353 - r73345;
        double r73355 = 0.041666666666666664;
        double r73356 = 4.0;
        double r73357 = pow(r73337, r73356);
        double r73358 = 0.5;
        double r73359 = 2.0;
        double r73360 = pow(r73337, r73359);
        double r73361 = r73358 * r73360;
        double r73362 = fma(r73344, r73337, r73361);
        double r73363 = -r73362;
        double r73364 = fma(r73355, r73357, r73363);
        double r73365 = r73352 - r73345;
        double r73366 = r73347 - r73365;
        double r73367 = r73364 * r73366;
        double r73368 = r73367 / r73366;
        double r73369 = r73343 ? r73354 : r73368;
        return r73369;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -7.616433541907881e-06 or 1.6624442377015138e-07 < eps

    1. Initial program 30.2

      \[\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\]
    4. Using strategy rm
    5. Applied log1p-expm1-u1.1

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

    if -7.616433541907881e-06 < eps < 1.6624442377015138e-07

    1. Initial program 49.2

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

      \[\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-exp48.8

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\log \left(e^{\sin x \cdot \sin \varepsilon}\right)}\right) - \cos x\]
    6. Using strategy rm
    7. Applied flip--48.8

      \[\leadsto \color{blue}{\frac{\left(\cos x \cdot \cos \varepsilon - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) \cdot \left(\cos x \cdot \cos \varepsilon - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) - \cos x \cdot \cos x}{\left(\cos x \cdot \cos \varepsilon - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) + \cos x}}\]
    8. Simplified48.8

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) \cdot \left(\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)\right)}}{\left(\cos x \cdot \cos \varepsilon - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) + \cos x}\]
    9. Simplified48.8

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -7.61643354190788131 \cdot 10^{-6} \lor \neg \left(\varepsilon \le 1.66244423770151382 \cdot 10^{-7}\right):\\ \;\;\;\;\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(x, \varepsilon, \frac{1}{2} \cdot {\varepsilon}^{2}\right)\right) \cdot \left(\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)\right)}{\cos x \cdot \cos \varepsilon - \left(\sin x \cdot \sin \varepsilon - \cos x\right)}\\ \end{array}\]

Reproduce

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