Average Error: 39.6 → 16.1
Time: 6.8s
Precision: 64
\[\cos \left(x + \varepsilon\right) - \cos x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -1.683954691424825443721279790749335285264 \cdot 10^{-14}:\\ \;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\ \mathbf{elif}\;\varepsilon \le 8.780898233035090036695397525560243152942 \cdot 10^{-11}:\\ \;\;\;\;\varepsilon \cdot \left({\varepsilon}^{3} \cdot \frac{1}{24} - \mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)\right) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\\ \end{array}\]
\cos \left(x + \varepsilon\right) - \cos x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.683954691424825443721279790749335285264 \cdot 10^{-14}:\\
\;\;\;\;\log \left(e^{\mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)}\right)\\

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

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

\end{array}
double f(double x, double eps) {
        double r80737 = x;
        double r80738 = eps;
        double r80739 = r80737 + r80738;
        double r80740 = cos(r80739);
        double r80741 = cos(r80737);
        double r80742 = r80740 - r80741;
        return r80742;
}

double f(double x, double eps) {
        double r80743 = eps;
        double r80744 = -1.6839546914248254e-14;
        bool r80745 = r80743 <= r80744;
        double r80746 = cos(r80743);
        double r80747 = x;
        double r80748 = cos(r80747);
        double r80749 = sin(r80747);
        double r80750 = sin(r80743);
        double r80751 = fma(r80749, r80750, r80748);
        double r80752 = -r80751;
        double r80753 = fma(r80746, r80748, r80752);
        double r80754 = exp(r80753);
        double r80755 = log(r80754);
        double r80756 = 8.78089823303509e-11;
        bool r80757 = r80743 <= r80756;
        double r80758 = 3.0;
        double r80759 = pow(r80743, r80758);
        double r80760 = 0.041666666666666664;
        double r80761 = r80759 * r80760;
        double r80762 = 0.5;
        double r80763 = fma(r80762, r80743, r80747);
        double r80764 = r80761 - r80763;
        double r80765 = r80743 * r80764;
        double r80766 = -r80748;
        double r80767 = 1.0;
        double r80768 = fma(r80766, r80767, r80748);
        double r80769 = r80765 + r80768;
        double r80770 = expm1(r80751);
        double r80771 = log1p(r80770);
        double r80772 = -r80771;
        double r80773 = fma(r80746, r80748, r80772);
        double r80774 = r80773 + r80768;
        double r80775 = r80757 ? r80769 : r80774;
        double r80776 = r80745 ? r80755 : r80775;
        return r80776;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 3 regimes
  2. if eps < -1.6839546914248254e-14

    1. Initial program 30.6

      \[\cos \left(x + \varepsilon\right) - \cos x\]
    2. Using strategy rm
    3. Applied cos-sum1.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-exp2.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-exp2.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-exp2.2

      \[\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-log2.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-log2.3

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

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

    if -1.6839546914248254e-14 < eps < 8.78089823303509e-11

    1. Initial program 49.3

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied add-cube-cbrt49.6

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{\left(\sqrt[3]{\cos x} \cdot \sqrt[3]{\cos x}\right) \cdot \sqrt[3]{\cos x}}\]
    6. Applied add-sqr-sqrt50.3

      \[\leadsto \color{blue}{\sqrt{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon} \cdot \sqrt{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}} - \left(\sqrt[3]{\cos x} \cdot \sqrt[3]{\cos x}\right) \cdot \sqrt[3]{\cos x}\]
    7. Applied prod-diff50.4

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

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

      \[\leadsto \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) + \color{blue}{\mathsf{fma}\left(-\cos x, 1, \cos x\right)}\]
    10. Taylor expanded around 0 31.3

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

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

    if 8.78089823303509e-11 < eps

    1. Initial program 30.1

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

      \[\leadsto \color{blue}{\left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right)} - \cos x\]
    4. Using strategy rm
    5. Applied add-cube-cbrt1.9

      \[\leadsto \left(\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon\right) - \color{blue}{\left(\sqrt[3]{\cos x} \cdot \sqrt[3]{\cos x}\right) \cdot \sqrt[3]{\cos x}}\]
    6. Applied add-sqr-sqrt32.8

      \[\leadsto \color{blue}{\sqrt{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon} \cdot \sqrt{\cos x \cdot \cos \varepsilon - \sin x \cdot \sin \varepsilon}} - \left(\sqrt[3]{\cos x} \cdot \sqrt[3]{\cos x}\right) \cdot \sqrt[3]{\cos x}\]
    7. Applied prod-diff32.8

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

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

      \[\leadsto \mathsf{fma}\left(\cos \varepsilon, \cos x, -\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right) + \color{blue}{\mathsf{fma}\left(-\cos x, 1, \cos x\right)}\]
    10. Using strategy rm
    11. Applied log1p-expm1-u1.5

      \[\leadsto \mathsf{fma}\left(\cos \varepsilon, \cos x, -\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\sin x, \sin \varepsilon, \cos x\right)\right)\right)}\right) + \mathsf{fma}\left(-\cos x, 1, \cos x\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification16.1

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

Reproduce

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