Average Error: 39.7 → 16.0
Time: 18.6s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -7.92917019758384 \cdot 10^{-09}:\\ \;\;\;\;\mathsf{fma}\left(\left(\cos x\right), \left(\cos \varepsilon\right), \left(-\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\mathsf{fma}\left(\left(\sin \varepsilon\right), \left(\sin x\right), \left(\cos x\right)\right)\right)\right)\right)\right)\right)\right)\\ \mathbf{elif}\;\varepsilon \le 4.7672729100119475 \cdot 10^{-08}:\\ \;\;\;\;\mathsf{fma}\left(\left(x \cdot \left(\left(x \cdot \varepsilon\right) \cdot x\right)\right), \frac{1}{6}, \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \frac{-1}{2} - x \cdot \varepsilon\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\left(\cos x\right), \left(\cos \varepsilon\right), \left(-\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\mathsf{fma}\left(\left(\sin \varepsilon\right), \left(\sin x\right), \left(\cos x\right)\right)\right)\right)\right)\right)\right)\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -7.92917019758384 \cdot 10^{-09}:\\
\;\;\;\;\mathsf{fma}\left(\left(\cos x\right), \left(\cos \varepsilon\right), \left(-\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\mathsf{fma}\left(\left(\sin \varepsilon\right), \left(\sin x\right), \left(\cos x\right)\right)\right)\right)\right)\right)\right)\right)\\

\mathbf{elif}\;\varepsilon \le 4.7672729100119475 \cdot 10^{-08}:\\
\;\;\;\;\mathsf{fma}\left(\left(x \cdot \left(\left(x \cdot \varepsilon\right) \cdot x\right)\right), \frac{1}{6}, \left(\left(\varepsilon \cdot \varepsilon\right) \cdot \frac{-1}{2} - x \cdot \varepsilon\right)\right)\\

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

\end{array}
double f(double x, double eps) {
        double r977289 = x;
        double r977290 = eps;
        double r977291 = r977289 + r977290;
        double r977292 = cos(r977291);
        double r977293 = cos(r977289);
        double r977294 = r977292 - r977293;
        return r977294;
}

double f(double x, double eps) {
        double r977295 = eps;
        double r977296 = -7.92917019758384e-09;
        bool r977297 = r977295 <= r977296;
        double r977298 = x;
        double r977299 = cos(r977298);
        double r977300 = cos(r977295);
        double r977301 = sin(r977295);
        double r977302 = sin(r977298);
        double r977303 = fma(r977301, r977302, r977299);
        double r977304 = expm1(r977303);
        double r977305 = log1p(r977304);
        double r977306 = -r977305;
        double r977307 = fma(r977299, r977300, r977306);
        double r977308 = 4.7672729100119475e-08;
        bool r977309 = r977295 <= r977308;
        double r977310 = r977298 * r977295;
        double r977311 = r977310 * r977298;
        double r977312 = r977298 * r977311;
        double r977313 = 0.16666666666666666;
        double r977314 = r977295 * r977295;
        double r977315 = -0.5;
        double r977316 = r977314 * r977315;
        double r977317 = r977316 - r977310;
        double r977318 = fma(r977312, r977313, r977317);
        double r977319 = r977309 ? r977318 : r977307;
        double r977320 = r977297 ? r977307 : r977319;
        return r977320;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -7.92917019758384e-09 or 4.7672729100119475e-08 < eps

    1. Initial program 30.9

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

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

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

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

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

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

    if -7.92917019758384e-09 < eps < 4.7672729100119475e-08

    1. Initial program 48.9

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Taylor expanded around 0 31.4

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

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

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

Reproduce

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