Average Error: 39.7 → 1.1
Time: 33.6s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.123336884479659292788468472057417102405 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 531195561.4738419055938720703125\right):\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\ \mathbf{else}:\\ \;\;\;\;\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)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.123336884479659292788468472057417102405 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 531195561.4738419055938720703125\right):\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\

\mathbf{else}:\\
\;\;\;\;\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)\\

\end{array}
double f(double x, double eps) {
        double r35933 = x;
        double r35934 = eps;
        double r35935 = r35933 + r35934;
        double r35936 = cos(r35935);
        double r35937 = cos(r35933);
        double r35938 = r35936 - r35937;
        return r35938;
}

double f(double x, double eps) {
        double r35939 = eps;
        double r35940 = -1.1233368844796593e-05;
        bool r35941 = r35939 <= r35940;
        double r35942 = 531195561.4738419;
        bool r35943 = r35939 <= r35942;
        double r35944 = !r35943;
        bool r35945 = r35941 || r35944;
        double r35946 = x;
        double r35947 = cos(r35946);
        double r35948 = cos(r35939);
        double r35949 = r35947 * r35948;
        double r35950 = sin(r35946);
        double r35951 = sin(r35939);
        double r35952 = fma(r35950, r35951, r35947);
        double r35953 = r35949 - r35952;
        double r35954 = -2.0;
        double r35955 = 2.0;
        double r35956 = r35939 / r35955;
        double r35957 = sin(r35956);
        double r35958 = r35954 * r35957;
        double r35959 = fma(r35955, r35946, r35939);
        double r35960 = r35959 / r35955;
        double r35961 = sin(r35960);
        double r35962 = log1p(r35961);
        double r35963 = expm1(r35962);
        double r35964 = r35958 * r35963;
        double r35965 = r35945 ? r35953 : r35964;
        return r35965;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if eps < -1.1233368844796593e-05 or 531195561.4738419 < eps

    1. Initial program 29.9

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

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

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

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

    if -1.1233368844796593e-05 < eps < 531195561.4738419

    1. Initial program 49.3

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

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

      \[\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)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -1.123336884479659292788468472057417102405 \cdot 10^{-5} \lor \neg \left(\varepsilon \le 531195561.4738419055938720703125\right):\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\\ \mathbf{else}:\\ \;\;\;\;\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)\\ \end{array}\]

Reproduce

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