Average Error: 39.8 → 1.1
Time: 25.4s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -2578326.2911242372:\\ \;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 6.177621166523711 \cdot 10^{-05}:\\ \;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\left(-2 \cdot \sin \left(\frac{\varepsilon}{2}\right)\right) \cdot \sin \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right)\right)\\ \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 -2578326.2911242372:\\
\;\;\;\;\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \cos x\\

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

\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 r1268960 = x;
        double r1268961 = eps;
        double r1268962 = r1268960 + r1268961;
        double r1268963 = cos(r1268962);
        double r1268964 = cos(r1268960);
        double r1268965 = r1268963 - r1268964;
        return r1268965;
}

double f(double x, double eps) {
        double r1268966 = eps;
        double r1268967 = -2578326.2911242372;
        bool r1268968 = r1268966 <= r1268967;
        double r1268969 = x;
        double r1268970 = cos(r1268969);
        double r1268971 = cos(r1268966);
        double r1268972 = r1268970 * r1268971;
        double r1268973 = sin(r1268969);
        double r1268974 = sin(r1268966);
        double r1268975 = r1268973 * r1268974;
        double r1268976 = r1268972 - r1268975;
        double r1268977 = r1268976 - r1268970;
        double r1268978 = 6.177621166523711e-05;
        bool r1268979 = r1268966 <= r1268978;
        double r1268980 = -2.0;
        double r1268981 = 2.0;
        double r1268982 = r1268966 / r1268981;
        double r1268983 = sin(r1268982);
        double r1268984 = r1268980 * r1268983;
        double r1268985 = fma(r1268981, r1268969, r1268966);
        double r1268986 = r1268985 / r1268981;
        double r1268987 = sin(r1268986);
        double r1268988 = r1268984 * r1268987;
        double r1268989 = log1p(r1268988);
        double r1268990 = expm1(r1268989);
        double r1268991 = fma(r1268974, r1268973, r1268970);
        double r1268992 = r1268972 - r1268991;
        double r1268993 = r1268979 ? r1268990 : r1268992;
        double r1268994 = r1268968 ? r1268977 : r1268993;
        return r1268994;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 31.2

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

    if -2578326.2911242372 < eps < 6.177621166523711e-05

    1. Initial program 48.7

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

      \[\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. Simplified1.2

      \[\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*1.2

      \[\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-u1.4

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

    if 6.177621166523711e-05 < eps

    1. Initial program 30.0

      \[\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. Applied associate--l-1.0

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

      \[\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 simplification1.1

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

Reproduce

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