Average Error: 39.6 → 16.3
Time: 7.0s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -6.37911807573950135 \cdot 10^{-32}:\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \sqrt[3]{{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}\\ \mathbf{elif}\;\varepsilon \le 2.82449318235822406 \cdot 10^{-6}:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.37911807573950135 \cdot 10^{-32}:\\
\;\;\;\;\cos x \cdot \cos \varepsilon - \sqrt[3]{{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}\\

\mathbf{elif}\;\varepsilon \le 2.82449318235822406 \cdot 10^{-6}:\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\\

\end{array}
double f(double x, double eps) {
        double r59923 = x;
        double r59924 = eps;
        double r59925 = r59923 + r59924;
        double r59926 = cos(r59925);
        double r59927 = cos(r59923);
        double r59928 = r59926 - r59927;
        return r59928;
}

double f(double x, double eps) {
        double r59929 = eps;
        double r59930 = -6.379118075739501e-32;
        bool r59931 = r59929 <= r59930;
        double r59932 = x;
        double r59933 = cos(r59932);
        double r59934 = cos(r59929);
        double r59935 = r59933 * r59934;
        double r59936 = sin(r59932);
        double r59937 = sin(r59929);
        double r59938 = fma(r59936, r59937, r59933);
        double r59939 = 3.0;
        double r59940 = pow(r59938, r59939);
        double r59941 = cbrt(r59940);
        double r59942 = r59935 - r59941;
        double r59943 = 2.824493182358224e-06;
        bool r59944 = r59929 <= r59943;
        double r59945 = 0.16666666666666666;
        double r59946 = pow(r59932, r59939);
        double r59947 = r59945 * r59946;
        double r59948 = r59947 - r59932;
        double r59949 = 0.5;
        double r59950 = r59929 * r59949;
        double r59951 = r59948 - r59950;
        double r59952 = r59929 * r59951;
        double r59953 = expm1(r59952);
        double r59954 = log1p(r59953);
        double r59955 = r59935 - r59938;
        double r59956 = exp(r59955);
        double r59957 = log(r59956);
        double r59958 = r59944 ? r59954 : r59957;
        double r59959 = r59931 ? r59942 : r59958;
        return r59959;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -6.379118075739501e-32

    1. Initial program 32.8

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

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

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

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

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

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

    if -6.379118075739501e-32 < eps < 2.824493182358224e-06

    1. Initial program 49.0

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

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

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

      \[\leadsto \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)}\]
    8. Taylor expanded around 0 31.2

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

      \[\leadsto \mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)}\right)\right)\]

    if 2.824493182358224e-06 < eps

    1. Initial program 29.8

      \[\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)}\]
    6. Using strategy rm
    7. Applied add-log-exp1.0

      \[\leadsto \cos x \cdot \cos \varepsilon - \color{blue}{\log \left(e^{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)}\]
    8. Applied add-log-exp1.2

      \[\leadsto \color{blue}{\log \left(e^{\cos x \cdot \cos \varepsilon}\right)} - \log \left(e^{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\]
    9. Applied diff-log1.3

      \[\leadsto \color{blue}{\log \left(\frac{e^{\cos x \cdot \cos \varepsilon}}{e^{\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}}\right)}\]
    10. Simplified1.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -6.37911807573950135 \cdot 10^{-32}:\\ \;\;\;\;\cos x \cdot \cos \varepsilon - \sqrt[3]{{\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}^{3}}\\ \mathbf{elif}\;\varepsilon \le 2.82449318235822406 \cdot 10^{-6}:\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(\varepsilon \cdot \left(\left(\frac{1}{6} \cdot {x}^{3} - x\right) - \varepsilon \cdot \frac{1}{2}\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\cos x \cdot \cos \varepsilon - \mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)}\right)\\ \end{array}\]

Reproduce

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