Average Error: 39.2 → 15.6
Time: 6.5s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.894912541714580426696623582927259121789 \cdot 10^{-4}:\\ \;\;\;\;\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \sin x \cdot \sin \varepsilon\right) - \cos x\\ \mathbf{elif}\;\varepsilon \le 1.339671104451643834974770147505651607389 \cdot 10^{-5}:\\ \;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.894912541714580426696623582927259121789 \cdot 10^{-4}:\\
\;\;\;\;\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos x \cdot \cos \varepsilon\right)\right) - \sin x \cdot \sin \varepsilon\right) - \cos x\\

\mathbf{elif}\;\varepsilon \le 1.339671104451643834974770147505651607389 \cdot 10^{-5}:\\
\;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\\

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

\end{array}
double f(double x, double eps) {
        double r61042 = x;
        double r61043 = eps;
        double r61044 = r61042 + r61043;
        double r61045 = cos(r61044);
        double r61046 = cos(r61042);
        double r61047 = r61045 - r61046;
        return r61047;
}

double f(double x, double eps) {
        double r61048 = eps;
        double r61049 = -0.00018949125417145804;
        bool r61050 = r61048 <= r61049;
        double r61051 = x;
        double r61052 = cos(r61051);
        double r61053 = cos(r61048);
        double r61054 = r61052 * r61053;
        double r61055 = expm1(r61054);
        double r61056 = log1p(r61055);
        double r61057 = sin(r61051);
        double r61058 = sin(r61048);
        double r61059 = r61057 * r61058;
        double r61060 = r61056 - r61059;
        double r61061 = r61060 - r61052;
        double r61062 = 1.3396711044516438e-05;
        bool r61063 = r61048 <= r61062;
        double r61064 = 3.0;
        double r61065 = pow(r61048, r61064);
        double r61066 = 0.041666666666666664;
        double r61067 = r61065 * r61066;
        double r61068 = 0.5;
        double r61069 = fma(r61068, r61048, r61051);
        double r61070 = r61067 - r61069;
        double r61071 = r61048 * r61070;
        double r61072 = fma(r61057, r61058, r61052);
        double r61073 = -r61072;
        double r61074 = fma(r61053, r61052, r61073);
        double r61075 = exp(r61074);
        double r61076 = log(r61075);
        double r61077 = r61063 ? r61071 : r61076;
        double r61078 = r61050 ? r61061 : r61077;
        return r61078;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 29.6

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

      \[\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 -0.00018949125417145804 < eps < 1.3396711044516438e-05

    1. Initial program 49.1

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

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

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{\log \left(e^{\cos x}\right)}\]
    6. Applied add-log-exp48.9

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\log \left(e^{\sin x \cdot \sin \varepsilon}\right)}\right) - \log \left(e^{\cos x}\right)\]
    7. Applied add-log-exp48.7

      \[\leadsto \left(\color{blue}{\log \left(e^{\cos x \cdot \cos \varepsilon}\right)} - \log \left(e^{\sin x \cdot \sin \varepsilon}\right)\right) - \log \left(e^{\cos x}\right)\]
    8. Applied diff-log48.7

      \[\leadsto \color{blue}{\log \left(\frac{e^{\cos x \cdot \cos \varepsilon}}{e^{\sin x \cdot \sin \varepsilon}}\right)} - \log \left(e^{\cos x}\right)\]
    9. Applied diff-log48.7

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

      \[\leadsto \log \color{blue}{\left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)}\]
    11. Taylor expanded around 0 30.7

      \[\leadsto \color{blue}{\frac{1}{24} \cdot {\varepsilon}^{4} - \left(x \cdot \varepsilon + \frac{1}{2} \cdot {\varepsilon}^{2}\right)}\]
    12. Simplified30.7

      \[\leadsto \color{blue}{\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)}\]

    if 1.3396711044516438e-05 < eps

    1. Initial program 29.7

      \[\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. Using strategy rm
    5. Applied add-log-exp1.0

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{\log \left(e^{\cos x}\right)}\]
    6. Applied add-log-exp1.1

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \color{blue}{\log \left(e^{\sin x \cdot \sin \varepsilon}\right)}\right) - \log \left(e^{\cos x}\right)\]
    7. Applied add-log-exp1.3

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

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

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

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

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

Reproduce

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